Answers:
签出Office Migration Planning Manager。
该工具包还包含Office File Converter(OFC),该文件支持将大量文档从二进制格式转换为OpenXML格式。(Technet)
请注意,您还需要Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
OFC才能起作用。
似乎似乎不再支持这两种工具。
我建议使用宏来处理文件夹中的文件,以将它们从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格式时会删除宏。
因此,我编写了一个简单的VBScript,以无提示的方式将.xls文件转换为.xlsx。
./convert-xls-xlsx.vbs {包含.xls文件的文件夹的路径}
convert-xls-xlsx.vbs:
设置参数= WScript.Arguments strPath = args(0) strPath = CreateObject(“ Scripting.FileSystemObject”)。GetAbsolutePathName(strPath) 设置objExcel = CreateObject(“ Excel.Application”) objExcel.Visible = False objExcel.DisplayAlerts = False 设置objFso = CreateObject(“ Scripting.FileSystemObject”) 设置objFolder = objFso.GetFolder(strPath) 对于objFolder.Files中的每个objFile fileName = objFile.Path 如果(objFso.GetExtensionName(objFile.Path)=“ xls”) 设置objWorkbook = objExcel.Workbooks.Open(fileName) saveFileName =替换(文件名,“。xls”,“。xlsx”) objWorkbook.SaveAs saveFileName,51 objWorkbook.Close() objExcel.Application.DisplayAlerts = True 万一 下一个 MsgBox“完成转换”
注意:请注意文件夹路径中是否有空格,如果您的路径之间有空格,请将该路径放在引号中。
子SaveAllAsXLSX() 昏暗的strFilename作为字符串 昏暗的strDocName作为字符串 Dim strPath作为字符串 昏暗的wbk作为工作簿 Dim fDialog作为FileDialog Dim intPos作为整数 昏暗的strPassword作为字符串 昏暗的strWritePassword作为字符串 昏暗的varA作为字符串 昏暗的varB作为字符串 昏暗的colFiles作为新收藏 将vFile变暗 设置fDialog = Application.FileDialog(msoFileDialogFolderPicker) 使用fDialog .Title =“选择文件夹,然后单击确定” .AllowMultiSelect =真 .InitialView = msoFileDialogViewList 如果显示-1然后 MsgBox“已被用户取消”,“列出文件夹内容” 退出子 万一 strPath = fDialog.SelectedItems.Item(1) 如果Right(strPath,1)“ \”然后strPath = strPath +“ \” 结束于 如果Left(strPath,1)= Chr(34)然后 strPath = Mid(strPath,2,Len(strPath)-2) 万一 设置obj = CreateObject(“ Scripting.FileSystemObject”) RecursiveDir colFiles,strPath,“ *。xls”,True 对于colFiles中的每个vFile Debug.Print vFile strFilename = vFile varA = Right(strFilename,3) 如果(varA =“ xls”或varA =“ XLSX”),则 设置wbk = Workbooks.Open(文件名:= strFilename) 如果wbk.HasVBProject然后 wbk.SaveAs文件名:= strFilename&“ m”,文件格式:= xlOpenXMLWorkbookMacroEnabled 其他 wbk.SaveAs文件名:= strFilename&“ x”,文件格式:= xlOpenXMLWorkbook 万一 wbk.Close SaveChanges:= False obj.DeleteFile(strFilename) 万一 下一个vFile 结束子 公共函数RecursiveDir(colFiles作为Collection,_ strFolder作为字符串,_ strFileSpec作为字符串,_ bIncludeSubfolders为布尔值) Dim strTemp作为字符串 昏暗的colFolders作为新收藏 Dim vFolderName作为变体 '将与strFileSpec匹配的strFolder中的文件添加到colFiles strFolder = TrailingSlash(strFolder) strTemp =目录(strFolder和strFileSpec) 在strTemp vbNullString时执行 colFiles.Add strFolder和strTemp strTemp =目录 环 如果bIncludeSubfolders然后 '用strFolder的子目录列表填充colFolders strTemp =目录(strFolder,vbDirectory) 在strTemp vbNullString时执行 如果(strTemp“。”)和(strTemp“ ..”)然后 如果(GetAttr(strFolder&strTemp)和vbDirectory)0然后 colFolders.Add strTemp 万一 万一 strTemp =目录 环 '为colFolders中的每个子文件夹调用RecursiveDir 对于colFolders中的每个vFolderName 调用RecursiveDir(colFiles,strFolder和vFolderName,strFileSpec,True) 下一个vFolderName 万一 结束功能 公共函数TrailingSlash(strFolder As String)As String 如果Len(strFolder)> 0然后 如果Right(strFolder,1)=“ \”,则 TrailingSlash = strFolder 其他 TrailingSlash = strFolder&“ \” 万一 万一 结束功能
如果您已安装MsOffice,则可以通过下载此工具来快速修复。
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
选择文件夹查看xls文件转换时,请确保勾选使用MS Office进行转换的转换工具选项,而不是使用其自己的转换器。
如果使用他们自己的转换器,则单元格中的颜色会丢失,并且单页纸似乎会出来。如果您使用MsOffice,则该转换器似乎工作正常。快速修复的好工具。