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
13
Được thích
1
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

  • FILE CHUYEN DUOI.xlsx
    9.9 KB · Đọc: 4
  • FILE GOC.XLS
    230 bytes · Đọc: 9
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
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

  • GPE XLS-XLSX.xlsm
    26.8 KB · Đọc: 9
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
Web KT

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

Back
Top Bottom