• Thứ Ba, 14/11/2006 07:55 (GMT+7)

    Dồn nhiều file Excel thành 1 file

    Câu hỏi :
    Xin hướng dẫn viết hàm VB để thực hiện tổng hợp 800 file Excel nằm trên các thư mục khác nhau thành 1 file duy nhất. 
     

    Trả lời :

    Ý tưởng dồn hàng trăm file độc lập thành 1 file duy nhất là không hay, ngược với cách quản lý khoa học thông thường. Thực tế, để quản lý thông tin lớn, người ta thường chia nhỏ nó ra thành nhiều phần và chứa chúng lên nhiều file độc lập nhau, mỗi lần cần xử lý thành phần nào thì chỉ mở file tương ứng chứ không cần đụng chạm tới các file còn lại. Tuy nhiên nếu muốn dồn các file Excel lại thì bạn hãy viết code thực hiện tự động. Thí dụ đoạn code VB sau đây cho phép copy các worksheet của file c:\MySource.xls sang file c:\MyDest.xls, dựa vào đoạn code này bạn có thể phát triển lên để copy nhiều file *.xls vào 1 file *.xls. Bạn có thể dùng lệnh Dir của VB để duyệt tìm các file *.xls có trên đĩa cứng, ứng với mỗi file tìm được, bạn copy các worksheet của nó sang file kết quả như đoạn code dưới đây:

     Private Sub Command1_Click()
     'khai báo các biến cần dùng
     Dim fWorking As Boolean
     Dim oExcelSrc As Excel.Application
     Dim oExcelDes As Excel.Application
     Dim oBookSrc As Excel.Workbook
     Dim oBookDes As Excel.Workbook
     Dim oSheetSrc As Excel.Worksheet
     Dim oSheetDes As Excel.Worksheet
     'Mở workbook Excel nguồn
     Set oExcelSrc = New Excel.Application
     Set oBookSrc = oExcelSrc.Workbooks.Open("c:\MySource.xls")
     'Mở workbook Excel kết quả
     Set oExcelDes = New Excel.Application
     Set oBookDes = oExcelDes.Workbooks.Open("c:\MyDest.xls")
     'nếu muốn tạo mới thì dùng lệnh:
     'Set oBookDes = oExcelDes.Workbooks.Add
     
     'duyệt từng worksheet trong file nguồn
     For i = 1 To oBookSrc.Worksheets.Count
     Set oSheetSrc = oBookSrc.Worksheets(i)
     'chọn toàn bộ cell và copy vào Clipboard
     oSheetSrc.Activate
     oSheetSrc.Cells.Select
     oExcelSrc.ActiveWindow.Selection.Copy
     'tạo mới 1 worksheet trong file đích
     Set oSheetDes = oBookDes.Worksheets.Add(, oBookDes.Worksheets(oBookDes.Worksheets.Count))
     'dán nội dung Clipboard vào worksheet
     oSheetDes.Activate
     oSheetDes.Cells.Select
     oSheetDes.Paste
     Next i
     'lưu kết quả lên file đích
     oBookDes.SaveAs "C:\MyDest.xls", xlWorkbookNormal
     'dừng các ứng dụng Excel đã chạy
     oExcelSrc.Quit
     oExcelDes.Quit
     End Sub
     
    Lưu ý rằng đoạn code VB trên có sử dụng các đối tượng Excel Automation nên để chạy được, bạn cần chọn menu Project.References của VB, duyệt tìm và chọn thành phần "Microsoft Excel x.y Object Library" để "add" nó vào Project ứng dụng của bạn. Ngoài ra, việc dồn nhiều worksheet trên các file độc lập lại thành một file có thể phát sinh nhiều vấn đề như tranh chấp thông tin, mất nhất quán thông tin... vì có thể tên các worksheet của các file *.xls trùng nhau hay trong các worksheet có dùng các thông tin liên kết...
     

    Chuyên mục: Lập trình