如何自动将 Excel xls 文件转换为 Excel xml 格式?

How to automate converting Excel xls files to Excel xml format?

提问人:kristof 提问时间:10/6/2008 最后编辑:psadackristof 更新时间:12/17/2014 访问量:29064

问:

我有大约 200 个标准 Excel 2003 格式的 Excel 文件。

我需要将它们全部保存为 Excel xml - 基本上与打开每个文件并选择“另存为...”,然后选择“另存为类型:XML 电子表格”基本相同

您知道自动化该任务的任何简单方法吗?

胜过

评论


答:

3赞 Lou Franco 10/6/2008 #1

您可以调整我在这里发布的代码:

http://www.atalasoft.com/cs/blogs/loufranco/archive/2008/04/01/loading-office-documents-in-net.aspx

它演示了如何另存为 PDF(博客中显示 Word,但如果您下载解决方案,它包含 Excel 和 PPT 的代码)。

您需要找到保存为新格式而不是导出的函数(可能最简单的方法是在Excel中记录自己的宏,然后查看代码)。

评论

0赞 kristof 10/7/2008
感谢 Lou 的回答和更正问题中的文件扩展名。当我需要更全面的解决方案时,我可能会考虑您的建议。至于目前我对VBA没问题
0赞 iafonov 10/6/2008 #2

最简单的方法是记录一个文件的宏,然后手动编辑宏以使用循环对文件夹中的文件执行此类操作。在宏中,您可以使用标准 VB 函数来获取目录中的所有文件并对其进行过滤。您可以 http://www.xtremevbtalk.com/archive/index.php/t-247211.html 查找其他信息。

3赞 Duncan Smart 10/6/2008 #3

将它们全部打开,然后按 Alt+F11 进入宏编辑器并输入如下内容:

Sub SaveAllAsXml()
    Dim wbk As Workbook
    For Each wbk In Application.Workbooks
        wbk.SaveAs FileFormat:=XlFileFormat.xlXMLSpreadsheet
    Next
End Sub

然后按 F5 运行它。可能需要一些调整,因为我还没有测试过。

1赞 BKimmel 10/7/2008 #4

听起来像是我最喜欢的、最被低估的语言的工作:VBScript!!

将其放入文本文件中,并扩展名为“.vbs”:

set xlapp = CreateObject("Excel.Application")
set fso = CreateObject("scripting.filesystemobject")
set myfolder = fso.GetFolder("YOURFOLDERPATHHERE")
set myfiles = myfolder.Files
for each f in myfiles
   set mybook = xlapp.Workbooks.Open(f.Path)
   mybook.SaveAs f.Name & ".xml", 47
   mybook.Close
next

我还没有测试过这个,但它应该可以工作

8赞 Robert Mearns 10/7/2008 #5

下面是一个例程,它将转换单个目录中扩展名为 .xls 的所有文件。

它需要一种直接的方法。工作簿中的任何 VBA 代码都将被剥离,工作簿不会以 .xlsm 扩展名保存。任何不兼容警告都不会消失,而是自动接受更改。

Sub Convert_xls_Files()

Dim strFile As String
Dim strPath As String

    With Application
        .EnableEvents = False
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
'Turn off events, alerts & screen updating

        strPath = "C:\temp\excel\"
        strFile = Dir(strPath & "*.xls")
'Change the path as required

    Do While strFile <> ""
        Workbooks.Open (strPath & strFile)
        strFile = Mid(strFile, 1, Len(strFile) - 4) & ".xlsx"
        ActiveWorkbook.SaveAs Filename:=strPath & strFile, FileFormat:=xlOpenXMLWorkbook
        ActiveWorkbook.Close True
        strFile = Dir
    Loop
'Opens the Workbook, set the file name, save in new format and close workbook

    With Application
        .EnableEvents = True
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
'Turn on events, alerts & screen updating

End Sub

评论

1赞 kristof 10/7/2008
谢谢罗伯特,效果很好。我唯一更改的是 FileFormat:=XlFileFormat.xlXMLSpreadsheet(我使用的是 Excel 2003)
0赞 Kishore Relangi 12/17/2014 #6
Const xlXLSX = 51

REM 51 = xlOpenXMLWorkbook (without macro's in 2007-2013, xlsx)
REM 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2013, xlsm)
REM 50 = xlExcel12 (Excel Binary Workbook in 2007-2013 with or without macro's, xlsb)
REM 56 = xlExcel8 (97-2003 format in Excel 2007-2013, xls)

dim args
dim file
dim sFile
set args=wscript.arguments

dim wshell
Set wshell = CreateObject("WScript.Shell")

Set objExcel = CreateObject("Excel.Application")

Set objWorkbook = objExcel.Workbooks.Open( wshell.CurrentDirectory&"\"&args(0))

objExcel.DisplayAlerts = FALSE

objExcel.Visible = FALSE

objWorkbook.SaveAs wshell.CurrentDirectory&"\"&args(1), xlXLSX

objExcel.Quit

Wscript.Quit