Cách Chia 1 Sheet Ra Thành Nhiều File EXCEL Với Đúng Số Dòng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

là gửi cả tool lên ạ. :( tool thì công ty em không cho public ạ. Vì tool thuê coder nước ngoài viết a ạ. Bình thường e dùng googlesheet ở excel để làm và xuất ra file CSV để dùng để chạy ạ
File File File.csv ấy.
Tôi trả lời cái gì thì chỉ trích dẫn đích xác cái đó. Không thừa, không thiếu.
 

File đính kèm

Chào các anh, chị ạ
Cho em hỏi là em hiện tại đang làm thủ công, copy paste các dữ liệu từ 1 sheet ra thành nhiều file excel . Ví dụ cột A1 em có gần 700 dòng, mà em đang cần tách ra cứ 45 dòng lại thành 1 file excel đuôi CSV để dùng cho tool ạ (mỗi dòng khoảng 4-15 cột ạ), hoặc anh chị giúp em lưu ra file XSL rùi em mở lại rùi lưu lại thành csv cũng được ạ, như vậy cũng giúp đỡ e rất nhiều rùi!
Ví dụ đến dòng cuối mà còn nhỏ hơn 45 thì cũng lưu lại thành file excel mới ạ. Mà dạo này gần tết khối lượng công việc quá nhiều, nên làm bằng tay tốn rất nhiều thời gian ạ. Em có gửi các anh, chị file mẫu để xem ạ. Em xin cảm ơn anh, chị nhiều, Mong anh, chị giúp em ạ!
Thử sử dụng File.
1/ Tải File rar về rồi giải nén, sau đó Copy cái Folder bên trong bỏ vào ổ D.
2/ Mở Folder Luu_CSV gồm 2 File (viền đỏ trong hình).
- File Excel có tên File_Goc là File chứa dữ liệu cần lấy để tách File CSV.
- Mở File Tách File CSV 50 dòng rồi nhấn nút nó sẽ tách File_Goc ra 14 File CSV như hình có viền vàng.

Lưu ý:
- Copy tên File cần lấy dữ liệu và Paste vào I4.
- Tên File tách ra là tên ở I4 và đánh số thứ tự.

A_CSV.GIF

A_I4.GIF
 

File đính kèm

Lần chỉnh sửa cuối:
Thử sử dụng File.
1/ Tải File rar về rồi giải nén, sau đó Copy cái Folder bên trong bỏ vào ổ D.
2/ Mở Folder Luu_CSV gồm 2 File (viền đỏ trong hình).
- File Excel có tên File_Goc là File chứa dữ liệu cần lấy để tách File CSV.
- Mở File Tách File CSV 50 dòng rồi nhấn nút nó sẽ tách File_Goc ra 14 File CSV như hình có viền vàng.

Lưu ý:
- Copy tên File cần lấy dữ liệu và Paste vào I4.
- Tên File tách ra là tên ở I4 và đánh số thứ tự.

View attachment 230987

View attachment 230991
Em cảm ơn anh, nhưng em làm không được anh ạ. Em có chụp file gốc và lỗi để a xem ạ
Screen Shot 2020-01-09 at 08.38.59.pngScreen Shot 2020-01-09 at 08.38.45.png
 
Em cảm ơn anh, nhưng em làm không được anh ạ. Em có chụp file gốc và lỗi để a xem ạ
Bài 23 tôi đã giải thích rỏ rồi nhưng bạn không đọc kỹ. Tại 1/ tôi nêu thế này "Tải File rar về rồi giải nén, sau đó Copy cái Folder bên trong bỏ vào ổ D".
Lỗi như hình trên là do bạn giải nén ngay trong ổ D và trong File giải nó có tới 2 cái Folder Luu_CSV nên nó sai đường dẫn tại G4.
Bạn nên đọc kỹ hướng dẫn và làm đúng thì sẽ không bị lỗi.
 
Bài 23 tôi đã giải thích rỏ rồi nhưng bạn không đọc kỹ. Tại 1/ tôi nêu thế này "Tải File rar về rồi giải nén, sau đó Copy cái Folder bên trong bỏ vào ổ D".
Lỗi như hình trên là do bạn giải nén ngay trong ổ D và trong File giải nó có tới 2 cái Folder Luu_CSV nên nó sai đường dẫn tại G4.
Bạn nên đọc kỹ hướng dẫn và làm đúng thì sẽ không bị lỗi.
vang a, em cam on a nhieu. Em lam duoc rui a
 
Bình thường e dùng googlesheet
Làm ở Google Sheets đây.
Link này: https://docs.google.com/spreadsheets/d/1R1V0eeLMxT-YEAwwx96HVU1cOYLbuxH9OXGW6fIUQGk/edit?usp=sharing
1/ Xóa bỏ các dòng trống ở trên đầu;
2/
Vào Tools <> Scripts Editor, rồi chép đoạn dưới vào, lưu thành 1 project.
PHP:
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{name: "Split to CSV files", functionName: "split_to_csv"}];
  ss.addMenu("Custom tools", csvMenuEntries);
};

function split_to_csv() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var extention = ".csv";
  // create a folder from the name of the spreadsheet
  var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
  
  var result= convert_range_to_csv(sheet);
  var csv_data = result[0];
  var csv_names = result[1];

  for (var i=0; i < csv_data.length; i++) {
    var csv_file = csv_data[i];
    var file_name = csv_names[i] + extention;
    folder.createFile(file_name, csv_file);
  }
  Browser.msgBox('All *.csv files stored in a folder named ' + folder.getName());
}

function convert_range_to_csv(gg_sheet) {
  var csv_data = [];
  var csv_names = [];
  var prefix = "table_";
  var icount  = 0;
  var step = 45;
  // get available data range in the spreadsheet
  var activeRange = gg_sheet.getDataRange();
  try {
    var data = activeRange.getValues();

    // loop through the data in the range and build a string with the csv data
    if (data.length > 1) {
      for (var row = 0; row < data.length; row=row+step) {
        var csv = "";
        icount = icount + 1;
        csv_names.push(prefix + icount.toString());
        
        var end_row = Math.min(data.length, row + step);
        
        for (var irow = row; irow < end_row; irow++) {
          for (var col = 0; col < data[irow].length; col++) {
            if (data[irow][col].toString().indexOf(",") != -1) {
              data[irow][col] = "\"" + data[irow][col] + "\"";
            }
          }
        // join each row's columns
        // add a carriage return to end of each row, except for the last one
        if (irow < end_row - 1) {
          csv += data[irow].join(",") + "\r\n";
        }
        else {
          csv += data[irow];
        }
      }
      csv_data.push(csv);
    }
   }
    return [csv_data,csv_names];
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}

1578557927912.png

3/ Quay lại cửa sổ bảng Google Sheets, Refresh lại trình duyệt web, có nút lệnh ở cuối như hình và dùng thôi.

4/ Áp dụng lần sau: Chép dữ liệu vào file đó rồi chạy công cụ.

1578557887033.png

1578558083610.png
 

File đính kèm

  • 1578557916655.png
    1578557916655.png
    70.8 KB · Đọc: 4
Làm ở Google Sheets đây.
Link này: https://docs.google.com/spreadsheets/d/1R1V0eeLMxT-YEAwwx96HVU1cOYLbuxH9OXGW6fIUQGk/edit?usp=sharing
1/ Xóa bỏ các dòng trống ở trên đầu;
2/
Vào Tools <> Scripts Editor, rồi chép đoạn dưới vào, lưu thành 1 project.
PHP:
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{name: "Split to CSV files", functionName: "split_to_csv"}];
  ss.addMenu("Custom tools", csvMenuEntries);
};

function split_to_csv() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var extention = ".csv";
  // create a folder from the name of the spreadsheet
  var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
 
  var result= convert_range_to_csv(sheet);
  var csv_data = result[0];
  var csv_names = result[1];

  for (var i=0; i < csv_data.length; i++) {
    var csv_file = csv_data[i];
    var file_name = csv_names[i] + extention;
    folder.createFile(file_name, csv_file);
  }
  Browser.msgBox('All *.csv files stored in a folder named ' + folder.getName());
}

function convert_range_to_csv(gg_sheet) {
  var csv_data = [];
  var csv_names = [];
  var prefix = "table_";
  var icount  = 0;
  var step = 45;
  // get available data range in the spreadsheet
  var activeRange = gg_sheet.getDataRange();
  try {
    var data = activeRange.getValues();

    // loop through the data in the range and build a string with the csv data
    if (data.length > 1) {
      for (var row = 0; row < data.length; row=row+step) {
        var csv = "";
        icount = icount + 1;
        csv_names.push(prefix + icount.toString());
       
        var end_row = Math.min(data.length, row + step);
       
        for (var irow = row; irow < end_row; irow++) {
          for (var col = 0; col < data[irow].length; col++) {
            if (data[irow][col].toString().indexOf(",") != -1) {
              data[irow][col] = "\"" + data[irow][col] + "\"";
            }
          }
        // join each row's columns
        // add a carriage return to end of each row, except for the last one
        if (irow < end_row - 1) {
          csv += data[irow].join(",") + "\r\n";
        }
        else {
          csv += data[irow];
        }
      }
      csv_data.push(csv);
    }
   }
    return [csv_data,csv_names];
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}

View attachment 231011

3/ Quay lại cửa sổ bảng Google Sheets, Refresh lại trình duyệt web, có nút lệnh ở cuối như hình và dùng thôi.

4/ Áp dụng lần sau: Chép dữ liệu vào file đó rồi chạy công cụ.

View attachment 231009

View attachment 231012
A ơi, e cảm ơn a rất rất nhiều ạ. Em làm được rồi a ạ. Vì bình thường dùng VBA e toàn phải dùng trên VPS. Cách a hướng dẫn e thật sự cảm ơn a nhiều nhiều nhiều nhièu ạ. EM CẢM ƠN ANH!!
 
Gửi các anh chị

Bin cũng gặp tình huống giống như @redbirdd206. Từ tệp tổng tách ra các tệp con mỗi tệp có 49 dòng dữ liệu, và đều có tiêu đề giống nhau từ dòng 1 đến dòng 9. Giống như tệp đính kèm.

Kết quả cảu em mong muốn giống như cách của bác @be_09 nhưng em không muốn để đường dẫn bên ngoài.

Em có tham khảo một số mã, nhưng không biết sai ở đâu mà tệp chạy vẫn chưa được. Mong các anh chị giúp đỡ.
Xin chân thành cảm ơn mọi người rất nhiều
========================================================================
Sub Tachfile()

Dim iColumn As Integer
iColumn = 27 'Chon cot can tach'
iRow = 9 'Chon dong header'
Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range

Dim WorkbookCounter As Integer
Dim Temp As String
Set myRangeToCopy = CreateObject("System.Collections.ArrayList")
Set myList = CreateObject("System.Collections.ArrayList")
Set myListWb = CreateObject("System.Collections.ArrayList")

Application.ScreenUpdating = False

Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = ThisSheet.UsedRange.Columns.Count
WorkbookCounter = 1
For p = iRow + 1 To ThisSheet.UsedRange.Rows.Count Step 1

Set firstColumnOfRowP = ThisSheet.Cells(p, 2)
If ("" = ThisSheet.Cells(p, 1)) Then
Exit For
End If

Dim isExist As Boolean
isExist = False
Dim iCount As Integer
For iCount = 0 To myList.Count - 1 Step 1
Set strTest = ThisSheet.Cells(p, iColumn)
If (myList.Item(iCount) = ThisSheet.Cells(p, iColumn)) Then
isExist = True
Exit For
End If
Next

If (isExist = False) Then
Set wb = Workbooks.Add
myListWb.Add wb
myList.Add ThisSheet.Cells(p, iColumn)

Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(1, 1), ThisSheet.Cells(iRow, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A" & wb.Sheets(1).UsedRange.Rows.Count)


Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A" & wb.Sheets(1).UsedRange.Rows.Count + 1)

Else
Set wb = myListWb.Item(iCount)
Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A" & wb.Sheets(1).UsedRange.Rows.Count + 1)

End If

Next p

Workbooks.Application.DisplayAlerts = False


For p = 0 To myListWb.Count - 1 Step 1
Set wb = myListWb.Item(p)

For iColumn = 1 To 27 Step 1
wb.Worksheets("Sheet1").Columns(iColumn).ColumnWidth = ThisSheet.Columns(iColumn).ColumnWidth
Next

'wb.SaveAs ThisWorkbook.Path & "\Current\" & myList.Item(p)'
'Tao thu muc chua cac file da tach, mac dinh "\"'

Set fso = CreateObject("Scripting.FileSystemObject")

' Tao thu muc Output
Dim output As String
output = Format(DateTime.Now - 1, "yyyyMMdd") 'Doi ten o day
Dim exist As Boolean
exist = fso.FolderExists(ThisWorkbook.Path & "\" & output)
If (exist = False) Then
Set f = fso.CreateFolder(ThisWorkbook.Path & "\" & output)
End If


wb.SaveAs ThisWorkbook.Path & "\" & output & "\" & "VCSC" & "-" & StrConv(myList.Item(p), 1) & ".csv"

wb.Close
Next

Application.ScreenUpdating = True
Set wb = Nothing
End Sub
========================================================================
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom