将XLS批量转换为XLSX


12

我必须使用只能导出XLS文件的旧应用程序,并且使用只能读取XLSX文件的EPPlus库在.Net中编写程序。

从XLS批量转换为XLSX的最简单方法是什么?

Answers:


6

签出Office Migration Planning Manager。

该工具包还包含Office File Converter(OFC),该文件支持将大量文档从二进制格式转换为OpenXML格式。(Technet

Technet上的概述

下载链接

请注意,您还需要Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFC才能起作用。
似乎似乎不再支持这两种工具。


1
似乎有很多人(包括我在内)对此工具存在问题,无故无法转换其xls文件。
约翰

3

我建议使用宏来处理文件夹中的文件,以将它们从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格式时会删除宏。


如果我想将.CSV转换为.XLSX怎么办?
Boris_yo 2014年

1

因此,我编写了一个简单的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“完成转换”

注意:请注意文件夹路径中是否有空格,如果您的路径之间有空格,请将该路径放在引号中。


我将DisplayAlerts更改为False,因为我不想了解任何宏,只需删除它们即可,这就是为什么我首先转换这些东西的原因。然后删除了最终的MsgBox,因为我不想让它烦扰我。
BeowulfNode42

0
子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&“ \”
        万一
    万一
结束功能


8
不仅可以粘贴一堆代码,还可以解释一下它的功能,用法和局限性(如果有)吗?这对将来的访问者会更有帮助。
slhck

0

如果您已安装MsOffice,则可以通过下载此工具来快速修复。

http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm

选择文件夹查看xls文件转换时,请确保勾选使用MS Office进行转换的转换工具选项,而不是使用其自己的转换器。

如果使用他们自己的转换器,则单元格中的颜色会丢失,并且单页纸似乎会出来。如果您使用MsOffice,则该转换器似乎工作正常。快速修复的好工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.