xls批量轉換為xlsx格式文件


由於使用的PHP庫解析xls格式文件有問題,而將xls格式轉換為xlsx格式就可以解析,考慮到xls文件有很多,需要使用批量轉換文件的方法,本文介紹兩種方法。

方法1:Python pandas庫

使用Python pandas庫的to_excel方法來另存為xlsx格式。

考慮到Excel文件一般有多個工作表,需要都讀出來然后保存。下面直接給出代碼:

import glob
import os
import time
import pandas as pd

class excelConvert():

    def __init__(self):
        self.path = os.getcwd()  # 當前工作路徑
        xlsxdirname = "xlsx"
        xlsxpath = os.path.join(self.path, xlsxdirname)

        if not os.path.exists(xlsxpath):
            print(f"創建文件夾: {xlsxdirname}")
            os.makedirs(xlsxpath)
        self.xlsxpath = xlsxpath

    def batch_convert(self):
        xls_files = glob.glob(self.path + "/*.xls")
        if len(xls_files) != 0:
            print('當前目錄下的xls格式文件:')
            for file in xls_files:
                print(os.path.basename(file))

                fname, _ = os.path.splitext(file)
                basename = os.path.basename(fname)
                xlsxpathname = os.path.join(self.xlsxpath, basename)
                self.saveasxlsx(file, xlsxpathname)
        else:
            print('該目錄下無xls格式文件,即將退出...')
            time.sleep(2)
            os._exit(0)

    def saveasxlsx(self, xlspath, xlsxpath):
        writer = pd.ExcelWriter(xlsxpath + '.xlsx')
        datas = pd.read_excel(xlspath,sheet_name=None)
        for sheetname, values in datas.items():
            data = pd.DataFrame(values)
            data.to_excel(writer, sheet_name=sheetname)
        writer.save()
        writer.close()

if __name__=='__main__':
    excel = excelConvert()
    excel.batch_convert()

使用上述代碼無法保留原Excel文件中的單元格樣式,接下來介紹使用VBA代碼進行轉換。

方法2:VBA批量轉換

使用VBA代碼進行批量轉換,代碼來源:https://www.extendoffice.com/documents/excel/1349-excel-batch-convert-xls-to-xlsx.html

打開Excel 2007或者以上版本,ALT + F11 打開 Microsoft Visual Basic for Applications窗口,點擊 插入-> 模塊,會打開代碼窗口。

或者右鍵點擊工作表,選擇【查看代碼】:

輸入以下代碼:

Sub ConvertToXlsx()
'Updateby Extendoffice
Dim strPath As String
Dim strFile As String
Dim xWbk As Workbook
Dim xSFD, xRFD As FileDialog
Dim xSPath As String
Dim xRPath As String
Set xSFD = Application.FileDialog(msoFileDialogFolderPicker)
With xSFD
.Title = "Please select the folder contains the xls files:"
.InitialFileName = "C:\"
End With
If xSFD.Show <> -1 Then Exit Sub
xSPath = xSFD.SelectedItems.Item(1)
Set xRFD = Application.FileDialog(msoFileDialogFolderPicker)
With xRFD
.Title = "Please select a folder for outputting the new files:"
.InitialFileName = "C:\"
End With
If xRFD.Show <> -1 Then Exit Sub
xRPath = xRFD.SelectedItems.Item(1) & "\"
strPath = xSPath & "\"
strFile = Dir(strPath & "*.xls")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Do While strFile <> ""
If Right(strFile, 3) = "xls" Then
Set xWbk = Workbooks.Open(Filename:=strPath & strFile)
xWbk.SaveAs Filename:=xRPath & strFile & "x", _
FileFormat:=xlOpenXMLWorkbook
xWbk.Close SaveChanges:=False
End If
strFile = Dir
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

點擊F5運行,選擇xls文件目錄和保存xlsx文件的目錄,然后會進行批量轉換。

--THE END--

逃離是事實,但我沒有背叛。——劉慈欣《三體2:黑暗森林》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM