Hỏi về câu lệnh mở file Excel ?

Liên hệ QC

tramp

Thành viên mới
Tham gia
22/2/09
Bài viết
18
Được thích
2
Xin chào các bạn !
Trong quá trình xử lý dữ liệu trong các file excel mình gặp khó khăn này mong các bác giải đáp dùm :
Số là mình có khoãng hơn 1000 file, mỗi file đều có tên khác nhau. Mình muốn viết 1 chương trình để mở từng file rồi lấy dữ liệu trong ô đầu tiên của sheet đầu tiên trong các file này sau đó đóng file lại. Nhưng do các file có tên khác nhau nên mình ko dùng câu lệnh Workbooks("...").Open được. Do đó mình muốn hỏi là ko biết có câu lệnh nào khác hay cách nào khác ko vậy ?
Cám ơn các bác trước nhé.
 
Xin chào các bạn !
Trong quá trình xử lý dữ liệu trong các file excel mình gặp khó khăn này mong các bác giải đáp dùm :
Số là mình có khoãng hơn 1000 file, mỗi file đều có tên khác nhau. Mình muốn viết 1 chương trình để mở từng file rồi lấy dữ liệu trong ô đầu tiên của sheet đầu tiên trong các file này sau đó đóng file lại. Nhưng do các file có tên khác nhau nên mình ko dùng câu lệnh Workbooks("...").Open được. Do đó mình muốn hỏi là ko biết có câu lệnh nào khác hay cách nào khác ko vậy ?
Cám ơn các bác trước nhé.
Bạn để ý thế này:
- Giả sử ta có 2 file, 1 file Tonghop.xls và 1 file Sub.xls nằm tại ổ D
- Giờ muốn lấy giá trị cell A1 của file Sub.xls cho vào cell A1 của file Tonghop.xls thì ta chỉ cần gõ công thức
='D:\[Sub.xls]Sheet1'!$A$1
- Không cần mở file thì công thức trên vẫn được cập nhật chính xác
- Vậy nhiệm vụ của bạn chỉ cần dùng code liệt kê tất cả các file mà bạn cần lấy dử liệu, thế vào công thức trên là xong
-------------------------
Code liệt kê tên file trong 1 thư mục có đầy trên GPE, chẳng hạn là link này:
http://www.giaiphapexcel.com/forum/showthread.php?t=17212
(Bạn mà mở 1000 file, lấy dử liệu rồi đóng lại chắc.. chết luôn)
 
Cám ơn anh ndu96081631 nhé. Cách này của anh đúng là đơn giản hơn thật.
Nhưng khi áp dụng vô cái đống dữ liệu của em thì lại gặp tiếp 1 vấn đề là Các Sheet trong File lại có tên khác nhau nửa (cộng với số lượng sheet trong mỗi file khác nhau), mà bây giờ em còn phải lấy dữ liệu trong mỗi sheet nữa nên đang đau đầu đây. Mong anh chỉ giáo thêm.
 
Àh. Cụ thể hơn là mình có khoảng hơn 1000 file excel có tên khác nhau và trong mỗi file thì có số lượng sheet khác nhau và tên sheet cũng khác. Và mình muốn viết một chương trình bằng VBA để lấy dữ liệu trong 4 ô đầu tiên của mỗi sheet trong mỗi file. Nhưng khi dùng câu lệnh để mở từng file thì chương trình chạy rất chậm. Mong các bạn có cách nào khác giúp mình ko?
Còn câu lệnh phía trên anh ndu96081631 nói thì lại gặp lỗi do khác tên sheet.
 
Àh. Cụ thể hơn là mình có khoảng hơn 1000 file excel có tên khác nhau và trong mỗi file thì có số lượng sheet khác nhau và tên sheet cũng khác. Và mình muốn viết một chương trình bằng VBA để lấy dữ liệu trong 4 ô đầu tiên của mỗi sheet trong mỗi file. Nhưng khi dùng câu lệnh để mở từng file thì chương trình chạy rất chậm. Mong các bạn có cách nào khác giúp mình ko?
Còn câu lệnh phía trên anh ndu96081631 nói thì lại gặp lỗi do khác tên sheet.
Mình nghĩ với dữ liệu của bạn thì nếu không dùng cách mở file có lẽ là không được. Các file của bạn không có cùng khuôn mẫu (tên file, số sheet, tên sheet). Theo mình biết thì nếu không mở file thì sẽ không thể duyệt được cấu trúc file được, có nghĩa là không biết file có bao nhiêu sheet, tên các sheet như thế nào. Dù chậm nhưng vẫn còn nhanh hơn là bạn mở và copy thủ công đúng không? Không biết cách của bạn làm như thế nào, bạn gửi file lên cho anh em tham khảo thử xem. Mình thấy vấn đề này cũng hay nên thử làm 1 file, up lên đây, các bạn góp ý cho mình nhé.
Mình đã thử nghiệm với 1230 file dữ liệu (là các bản copy của File1.xls, File2.xls, File3.xls), việc ghi dữ liệu mất 2 phút (CPU Core 2 Duo 2.4Ghz, RAM 1GB), cần phải sửa lại khai báo
PHP:
Dim i, j, n as Byte
thành
PHP:
Dim i, j, n as Long
Chắc chắn là file càng lớn thì thời gian càng lâu nhưng chắc là cũng không tệ lắm.
Không biết là tình huống mà bạn Tramp đưa ra có thực tế hay không nữa, có tới hơn 1000 file, cấu trúc không giống nhau,...
 

File đính kèm

  • Tong_hop_DL.rar
    23.1 KB · Đọc: 28
Lần chỉnh sửa cuối:
Àh. Cụ thể hơn là mình có khoảng hơn 1000 file excel có tên khác nhau và trong mỗi file thì có số lượng sheet khác nhau và tên sheet cũng khác. Và mình muốn viết một chương trình bằng VBA để lấy dữ liệu trong 4 ô đầu tiên của mỗi sheet trong mỗi file. Nhưng khi dùng câu lệnh để mở từng file thì chương trình chạy rất chậm. Mong các bạn có cách nào khác giúp mình ko?
Còn câu lệnh phía trên anh ndu96081631 nói thì lại gặp lỗi do khác tên sheet.
Trời ơi... 1000 file + Tên sheet không đồng nhất mà mở rồi đóng chắc... đói luôn!
Bạn nên nghiên cứu ADO thì hay hơn!
 
Mình nghĩ với dữ liệu của bạn thì nếu không dùng cách mở file có lẽ là không được. Các file của bạn không có cùng khuôn mẫu (tên file, số sheet, tên sheet). Theo mình biết thì nếu không mở file thì sẽ không thể duyệt được cấu trúc file được, có nghĩa là không biết file có bao nhiêu sheet, tên các sheet như thế nào. Dù chậm nhưng vẫn còn nhanh hơn là bạn mở và copy thủ công đúng không? Không biết cách của bạn làm như thế nào, bạn gửi file lên cho anh em tham khảo thử xem. Mình thấy vấn đề này cũng hay nên thử làm 1 file, up lên đây, các bạn góp ý cho mình nhé.
Mình đã thử nghiệm với 1230 file dữ liệu (là các bản copy của File1.xls, File2.xls, File3.xls), việc ghi dữ liệu mất 2 phút (CPU Core 2 Duo 2.4Ghz, RAM 1GB), cần phải sửa lại khai báo
PHP:
Dim i, j, n as Byte
thành
PHP:
Dim i, j, n as Long
Chắc chắn là file càng lớn thì thời gian càng lâu nhưng chắc là cũng không tệ lắm.
Không biết là tình huống mà bạn Tramp đưa ra có thực tế hay không nữa, có tới hơn 1000 file, cấu trúc không giống nhau,...

Cám ơn bạn nhé .
Để mình thử cách của bạn vào cái đống dữ liệu của mình xem sao.
Thật ra là máy mình bị hư và đem phục hồi ổ cứng lại. Do đó tên của các file excel nó bị mã hóa thành số và ko còn giữ được tên gốc .
 
Thật ra là máy mình bị hư và đem phục hồi ổ cứng lại. Do đó tên của các file excel nó bị mã hóa thành số và ko còn giữ được tên gốc .
Có lẽ cũng là một kinh nghiệm. Chắc bạn dùng Recover my files phải không? Dùng anh chàng này thì tên file và tên thư mục không được giữ nguyên như ban đầu. Có lần mình đã "vô tình" Format /MBR cái ổ cứng 80Gb của mình, kết quả là mất sạch sẽ dữ liệu. Mình đã sử dụng EASEUS Data Recovery Wizard Professional v4.0.1 để khôi phục khoảng 60Gb (trừ 20Gb của ổ C:). Thấy anh chàng này cũng hay: Khôi phục khá nhanh và giữ nguyên cấu trúc thư mục như ban đầu. Hình như đâu đó trên GPE cũng có giới thiệu về anh chàng này đó.
 
Web KT
Back
Top Bottom