![批量将 XLS 转换为 XLSX](https://linux22.com/image/1344309/%E6%89%B9%E9%87%8F%E5%B0%86%20XLS%20%E8%BD%AC%E6%8D%A2%E4%B8%BA%20XLSX.png)
我必须使用只能导出 XLS 文件的旧应用程序,并且我使用只能读取 XLSX 文件的 EPPlus 库在 .NET 中编写程序。
将它们从 XLS 批量转换为 XLSX 的最简单方法是什么?
答案1
查看 Office 迁移规划管理器。
该工具包还包含 Office 文件转换器 (OFC),它支持将文档从二进制格式批量转换为 OpenXML 格式。(科技网)
请注意,您还需要Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
OFC 才能工作。
这两种工具似乎都不再受支持。
答案2
我建议使用宏来处理文件夹中的文件,以将它们从 xls 转换为 xlsx。此代码假定所有文件都位于一个文件夹中,并且所有 xls 文件都需要转换,但如果您想选择单个文件,可以更新此代码。
此代码需要从 Excel 2007 或更高版本的工作簿运行。
Option Explicit
' Convert all xls files in selected folder to xlsx
Public Sub convertXLStoXLSX()
Dim FSO As Scripting.FileSystemObject
Dim strConversionPath As String
Dim fFile As File
Dim fFolder As Folder
Dim wkbConvert As Workbook
' Open dialog and select folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
On Error Resume Next ' Prevent debug mode if user cancels selection
strConversionPath = .SelectedItems(1)
On Error GoTo 0 ' Re-enable default error handling
End With
Set FSO = New Scripting.FileSystemObject
' Check if the folder exists
If FSO.FolderExists(strConversionPath) Then
Set fFolder = FSO.GetFolder(strConversionPath)
' Disable confirmation dialogs (to prevent "unsaved changes" dialog popping up)
' and screen updates (to speed up conversion)
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' Loop through files, find the .xls files
For Each fFile In fFolder.Files
If LCase$(Right(fFile.Name, 4)) = ".xls" Then
' Open temporary workbook
Set wkbConvert = Workbooks.Open(fFile.Path)
' Save as OpenXML workbook - if your .xls files contain macros
' then change to FileFormat:=xlOpenXMLWorkbookMacroEnabled
wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, _
Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
wkbConvert.Close SaveChanges:=False
' Delete original file
fFile.Delete Force:=True
End If
Next fFile
' Re-enable confirmation dialogs and screen updates
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
End Sub
笔记:如果您要转换的文件包含宏,则需要更新以
FileFormat:=xlOpenXMLWorkbook
读取FileFormat:=xlOpenXMLWorkbookMacroEnabled
。或者,如果您不需要转换文件中的宏代码,则可以将其保留,并在将其转换为 xlsx 格式时删除宏。
答案3
因此我编写了一个简单的 VBScript,以静默方式将 .xls 文件转换为 .xlsx。
./convert-xls-xlsx.vbs {path to folder containing .xls files}
转换-xls-xlsx.vbs:
Set args = WScript.Arguments
strPath = args(0)
strPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(strPath)
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.DisplayAlerts = False
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(strPath)
For Each objFile In objFolder.Files
fileName = objFile.Path
If (objFso.GetExtensionName(objFile.Path) = "xls") Then
Set objWorkbook = objExcel.Workbooks.Open(fileName)
saveFileName = Replace(fileName,".xls",".xlsx")
objWorkbook.SaveAs saveFileName,51
objWorkbook.Close()
objExcel.Application.DisplayAlerts = True
End If
Next
MsgBox "Finished conversion"
注意:注意文件夹路径中的空格,如果路径中间有空格,请将路径放在引号中。
答案4
如果您安装了 MsOffice,那么这个工具可能值得下载以进行快速修复。
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
当您选择一个文件夹来查看转换后的 xls 文件时,请确保勾选使用 MS Office 进行转换的转换工具选项,而不是他们自己的转换器。
如果您使用他们自己的转换器,单元格中的颜色会丢失,并且似乎会出现单张纸。如果您使用 MsOffice,因为转换器似乎运行良好。快速修复的好工具。