将 xls 转换为 xlsx 并删除旧文件

Posted

技术标签:

【中文标题】将 xls 转换为 xlsx 并删除旧文件【英文标题】:Converting xls to xlsx and deleting the old file 【发布时间】:2015-01-20 02:58:39 【问题描述】:

我正在使用以下宏将 xls 文件转换为 xlsx。它的问题在于SaveAs 的行。这将创建第二个文件,一个带有原始 xls 扩展名,第二个带有 xlsx 扩展名。如果我只是说“保存”,我会收到错误消息。如何删除 xls 文件或让宏执行 Save 而不是 SaveAs?我们需要转换文件的原因是,当我们通过电子邮件发送文件时,它的大小会更小。

Dim s As String
s = ActiveWorkbook.FullName
s = Replace(s, "xls", "xlsx")
ActiveWorkbook.SaveAs Filename:=s, _
      FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

【问题讨论】:

这里有两个独立的操作——创建一个新文件(xlsx 格式)和删除一个旧文件。真的没有办法解决这个问题。听起来你已经完成了第一个任务。这是与第二个相关的一些答案:***.com/questions/67835/deleting-a-file-in-vba 【参考方案1】:

在保存当前文件方面,您有两种选择:覆盖当前文件(使用相同类型),或生成文件。这是 Excel 的限制(功能?),而不是 VBA。

因此,为了实现您想要的,我们需要做更多的工作。我们需要的是FileSystemObject。这基本上允许您通过 VBA 与计算机上的文件和目录进行交互。我们需要做的第一件事是保留原始文件名;这将允许我们按名称删除它。从那里,我们将创建FileSystemObject,并使用它来调用DeleteFile 方法。所以,你的代码应该是这样的

Dim old_name As String, new_name As String
old_name = ActiveWorkbook.FullName
new_name = Replace(old_name, "xls", "xlsx")
ActiveWorkbook.SaveAs Filename:=new_name, _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

Dim FSO as FileSystemObject
Set FSO = New FileSystemObject
FSO.DeleteFile old_name
Set FSO = Nothing

请注意,您需要设置对 Microsoft Scripting Runtime 的引用才能创建和使用 FileSystemObject。

【讨论】:

以上是关于将 xls 转换为 xlsx 并删除旧文件的主要内容,如果未能解决你的问题,请参考以下文章

如何批处理将多个文件夹下的excel文件(xls,xlsx,csv等)合并成一个文件?

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

从python中的xls或xlsx文件读取后将数据转换为字符串

使用 python 将 tsv 文件转换为 xls/xlsx

xlrd 库不适用于 xlsx 文件。使用 python 将 xlsx 转换为 xls 的任何方法?

C# - 将 xls 文件转换为不带 office 组件的 xlsx