Mong giúp code chuyển file xls sang xlsx hàng loạt và không lỗi số liệu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hieug126

Thành viên mới
Tham gia
6/7/16
Bài viết
19
Được thích
3
Em chào các bác, do nhu cầu công việc em cần chuyển đổi hàng loạt file "xls" sang dạng "xlsx". Em đã tìm qua 1 số code trên mạng nhưng sau khi chuyển đổi phát sinh vấn đề là số liệu bị chuyển sang dạng Text và bị chuyển đổi sai như ở ô A2 và A8 ở "FILE GOC" so với "FILE CHUYEN DUOI" đính kèm. Nhờ các bác viết giúp em code để chuyển đổi sang file "xlsx" và vẫn đảm bảo đúng số liệu với ạ. Em cám ơn ạ!
 

File đính kèm

Với yêu cầu chuyển hàng loạt các file .xls sang .xlsxnày thì sử dụng python sẽ hợp lý hơn VBA do python hoạt động từ ngoài, khác với VBA là embed in Excel. Nếu sử dụng Python, bạn có thể sử dụng thư viện openpyxl và pandas. Dưới đây là mã ví dụ để thực hiện việc này.

import os
import pandas as pd

def convert_xls_to_xlsx(folder_path):
# Lặp qua tất cả các file trong thư mục
for filename in os.listdir(folder_path):
# Kiểm tra nếu file có định dạng .xls
if filename.endswith(".xls"):
file_path = os.path.join(folder_path, filename)
# Đọc file .xls bằng pandas
xls = pd.ExcelFile(file_path)

# Lưu mỗi sheet sang định dạng .xlsx
for sheet_name in xls.sheet_names:
df = pd.read_excel(file_path, sheet_name=sheet_name)
new_file_name = filename.replace(".xls", f"_{sheet_name}.xlsx")
new_file_path = os.path.join(folder_path, new_file_name)

# Ghi lại sheet vào file mới định dạng .xlsx
df.to_excel(new_file_path, index=False)
print(f"Đã chuyển {filename} (Sheet: {sheet_name}) sang {new_file_name}")

# Sử dụng hàm với đường dẫn thư mục chứa các file .xls
convert_xls_to_xlsx("path/to/your/folder")
 
Upvote 0
Hic em lại chưa dùng Python lần nào, VBA có cách nào không bác nhỉ
 
Upvote 0
Với yêu cầu chuyển hàng loạt các file .xls sang .xlsxnày thì sử dụng python sẽ hợp lý hơn VBA do python hoạt động từ ngoài, khác với VBA là embed in Excel. Nếu sử dụng Python, bạn có thể sử dụng thư viện openpyxl và pandas. Dưới đây là mã ví dụ để thực hiện việc này.

import os
import pandas as pd

def convert_xls_to_xlsx(folder_path):
# Lặp qua tất cả các file trong thư mục
for filename in os.listdir(folder_path):
# Kiểm tra nếu file có định dạng .xls
if filename.endswith(".xls"):
file_path = os.path.join(folder_path, filename)
# Đọc file .xls bằng pandas
xls = pd.ExcelFile(file_path)

# Lưu mỗi sheet sang định dạng .xlsx
for sheet_name in xls.sheet_names:
df = pd.read_excel(file_path, sheet_name=sheet_name)
new_file_name = filename.replace(".xls", f"_{sheet_name}.xlsx")
new_file_path = os.path.join(folder_path, new_file_name)

# Ghi lại sheet vào file mới định dạng .xlsx
df.to_excel(new_file_path, index=False)
print(f"Đã chuyển {filename} (Sheet: {sheet_name}) sang {new_file_name}")

# Sử dụng hàm với đường dẫn thư mục chứa các file .xls
convert_xls_to_xlsx("path/to/your/folder")
Dùng VBA chắc ăn hơn nhưng mất thời gian.
Mất thì mất, ngán gì. Uống cà phê cả buổi cũng được thì sá gì ít phút chạy code. --=0
 
Upvote 0
Hic em lại chưa dùng Python lần nào, VBA có cách nào không bác nhỉ
Không cần dùng dao mổ trâu để giết gà đâu bạn.
Bạn thử bấm vào mặt cười trong file, chọn các file cần chuyển từ đuôi xls sang xlsx, rồi xem kết quả xem sao nha.
Lưu ý: nên chạy thử trước ở các file nháp trước khi làm với file thật của bạn.
 

File đính kèm

Upvote 0
Không cần dùng dao mổ trâu để giết gà đâu bạn.
Bạn thử bấm vào mặt cười trong file, chọn các file cần chuyển từ đuôi xls sang xlsx, rồi xem kết quả xem sao nha.
Lưu ý: nên chạy thử trước ở các file nháp trước khi làm với file thật của bạn.
Thêm cái kiểm tra thuộc tính .HasVBProject để coi có VBA trong đó không.
Nếu có thì lưu .xlsm còn không thì .xlsx ?
 
Upvote 0
Không cần dùng dao mổ trâu để giết gà đâu bạn.
Bạn thử bấm vào mặt cười trong file, chọn các file cần chuyển từ đuôi xls sang xlsx, rồi xem kết quả xem sao nha.
Lưu ý: nên chạy thử trước ở các file nháp trước khi làm với file thật của bạn.
Em chạy thử file này để chuyển đuôi "FILE GOC" như em đính kèm vẫn bị lỗi thay đổi số liệu, ví dụ như ô A2 file gốc là "286.000" thì chuyển đổi xong lại thành "286". Không biết là bác thực hiện có lỗi như máy em không ạ
 
Upvote 0
Em chạy thử file này để chuyển đuôi "FILE GOC" như em đính kèm vẫn bị lỗi thay đổi số liệu, ví dụ như ô A2 file gốc là "286.000" thì chuyển đổi xong lại thành "286". Không biết là bác thực hiện có lỗi như máy em không ạ
Đúng là khi sử dụng dấu phân cách hàng nghìn bằng dấu phẩy (,) thì tải FILE GOC của bạn về nó chỉ ghi nhận giá trị 286, nên khi chuyển sang xlsx thì không gặp vấn đề.
Tuy nhiên ngược lại nếu ngăn cách hàng nghìn bằng dấu chấm (.) thì FILE GOC sẽ ghi nhận giá trị là 286.000, khi chuyển sang xlsx bằng VBA code sẽ chỉ còn 286
Bệnh này lạ với mình quá, trong thời gian chờ mò mẫm, hy vọng các thành viên khác có thể giúp đỡ thêm.
 
Upvote 0
Đúng là khi sử dụng dấu phân cách hàng nghìn bằng dấu phẩy (,) thì tải FILE GOC của bạn về nó chỉ ghi nhận giá trị 286, nên khi chuyển sang xlsx thì không gặp vấn đề.
Tuy nhiên ngược lại nếu ngăn cách hàng nghìn bằng dấu chấm (.) thì FILE GOC sẽ ghi nhận giá trị là 286.000, khi chuyển sang xlsx bằng VBA code sẽ chỉ còn 286
Bệnh này lạ với mình quá, trong thời gian chờ mò mẫm, hy vọng các thành viên khác có thể giúp đỡ thêm.
Định dạng number trong file tự thay đổi theo setting hệ thống của từng máy chứ nhỉ. Mà đã thế thì sao lại xảy ra lỗi thế kia. Cũng lạ.
 
Upvote 0
Bệnh này lạ với mình quá, trong thời gian chờ mò mẫm, hy vọng các thành viên khác có thể giúp đỡ thêm.
Nguyên nhân do file .xls ở bài 1 không phải là file excel mà là file .txt được đổi phần mở rộng thành .xls.
Khi dùng Excel để mở file .txt thì Excel sẽ cố chuyển đổi dữ liệu sang các kiểu dữ liệu phù hợp. Do đó, với chuỗi 286.000, nếu dấu phân cách hàng ngàn là dấu chấm thì sẽ chuyển thành 286000, nếu dấu phân cách thập phân là dấu chấm thì sẽ chuyển thành 286.
 
Upvote 0
Nguyên nhân do file .xls ở bài 1 không phải là file excel mà là file .txt được đổi phần mở rộng thành .xls.
Khi dùng Excel để mở file .txt thì Excel sẽ cố chuyển đổi dữ liệu sang các kiểu dữ liệu phù hợp. Do đó, với chuỗi 286.000, nếu dấu phân cách hàng ngàn là dấu chấm thì sẽ chuyển thành 286000, nếu dấu phân cách thập phân là dấu chấm thì sẽ chuyển thành 286.
Vậy có cách nào để chuyển đổi hàng loạt không bác nhỉ, phần mềm bên em kết xuất chỉ ra được mỗi mẫu này chứ không điều chỉnh đc (phần mềm kết xuất ra file ".xls" nhưng lúc save nó cũng hiển thị ".txt" như bác nói). Mỗi lần em mở file lên nó sẽ hiện thông báo như ảnh đính kèm → em Nhấn Yes → Save as sang dạng xlsx thì Số liệu sẽ không bị thay đổi và không sai. Tuy nhiên lượng file khá lớn và phải làm hàng ngày nên thao tác thủ công rất mất thời gian ạ.
 

File đính kèm

  • 1730355505144.png
    1730355505144.png
    21.1 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Em chào các bác, do nhu cầu công việc em cần chuyển đổi hàng loạt file "xls" sang dạng "xlsx". Em đã tìm qua 1 số code trên mạng nhưng sau khi chuyển đổi phát sinh vấn đề là số liệu bị chuyển sang dạng Text và bị chuyển đổi sai như ở ô A2 và A8 ở "FILE GOC" so với "FILE CHUYEN DUOI" đính kèm. Nhờ các bác viết giúp em code để chuyển đổi sang file "xlsx" và vẫn đảm bảo đúng số liệu với ạ. Em cám ơn ạ!
Nếu có file gốc với định dạng và cấu trúc nguyên bản thì có thể thử xem thế nào, nhưng ví dụ có mỗi một cột chơ vơ nên chưa thử vội.
 
Upvote 0
Nếu có file gốc với định dạng và cấu trúc nguyên bản thì có thể thử xem thế nào, nhưng ví dụ có mỗi một cột chơ vơ nên chưa thử vội.
Bạn chỉ đọc bài #1 mà không chịu đọc bài #11. (Chắc tại có từ viết tắt)
Nếu là tôi thì tôi hỏi lại "phần mềm gì đó xuất một ngày bao nhiêu files?"
Nếu nó xuất trên 200 files txt thì bảo nó chuyển sang csv
Phần mềm không có khả năng ghi csv thì là đồ bỏ đi.

Cái thớt muốn thực ra không cần thiết.
Một ngày mắc mớ gì phải làm việc với cả trăm (*) files Excel? Trừ phi là dân phân tích dữ liệu hạng cao cấp (chứng khoán, tuổi nợ, tuổi món nợ,vv...) Mà cao cấp cỡ này thì đã có quyền bảo bên phân mềm kia chúng xuất cho mình files đúng dạng Excel, đúng thiết kế bảng luôn.

(*) Đối với tôi, dưới trăm không phải là 'rất' nhiều.
 
Upvote 0
Nếu có file gốc với định dạng và cấu trúc nguyên bản thì có thể thử xem thế nào, nhưng ví dụ có mỗi một cột chơ vơ nên chưa thử vội.
File gốc của em định dạng cũng tương tự như file này, em có xóa một vài cột diễn giải vì lý do bảo mật ạ.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom