用VBA将xml格式的excel另存为xlsx

Posted 詩和遠方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VBA将xml格式的excel另存为xlsx相关的知识,希望对你有一定的参考价值。

需求背景

需要将从数据库提取的数据交给用户,由于数据量较大(好几十万行),若导出为有固定分隔符的文本文件给用户,一来体验上不太好,二来若文本字符和分隔符号相同可能会出问题。于是想导出为Excel,若行数超出Excel行数限制,可拆分为多份再导出。

但由于工具限制,软件无法直接导出为Excel格式,但可导出Excel XML Spreadsheet,后缀名为xml,Excel可直接打开。

后面想更进一步,将导出的xml文件打开后另存为正常的xlsx格式再给用户,但如果导出的文件很多,一个个打开再另存,比较繁琐,于是想有无办法自动将那些xml批量另存为xlsx

解决办法

本来想用python解决,但网上找资料发现很多都是去解析xml再写到excel,代码量大而且消耗太多内存,速度也不快。理想方案应该是充分利用excel本身的功能,模拟直接打开xml后再另存为xlsx的这个过程。最后发现还是VBA合适,毕竟专为office而生,具体参考代码如下:

Public Sub ConvertXmlToXlsx()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object

xmlFolder = "D:\\Users\\Documents\\Temp\\Working\\xml\\"
convFolder = "D:\\Users\\Documents\\Temp\\Working\\xls\\"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(xmlFolder)
For Each objFile In objFolder.Files
    If UCase(Right(objFile.Name, Len(XML))) = UCase(XML) Then
        NewFileName = convFolder & Left(objFile.Name, Len(objFile.Name) - 4) & ".xlsx"
        Set ConvertThis = Workbooks.Open(objFolder & "\\" & objFile.Name)
        ConvertThis.SaveAs Filename:=NewFileName, FileFormat:=xlOpenXMLWorkbook
        ConvertThis.Close
    End If
Next objFile
End Sub

VBA运行方法

新建一个Excel,按ALT+F11调出 VBA编辑器,菜单:插入->模块,然后贴上脚本,修改相关路径等,然后运行即可。
另外,上述脚本将xml改为xls后,应该还可以实现批量将xls转为xlsx的功能。

参考资料:https://stackoverflow.com/questions/38587755/convert-xml-file-to-xlsx-file-with-vba

以上是关于用VBA将xml格式的excel另存为xlsx的主要内容,如果未能解决你的问题,请参考以下文章

使用VBA批量转换Excel格式,由.xls转换成.xlsx

java怎么把xls格式的文件另存为xlsx文件,不能直接改后缀名?

vbscript [将工作表另存为XLSX]将Excel文件中的所有工作表另存为单独的XLSX文件。 #Excel

另存为工作簿类的方法失败 - Outlook vba

如何批量将CSV格式的文件转化成excel格式

怎么把xls文件转换成excel文件格式