在Excel VBA或Python中的文件夹和子文件夹中将xlsx文件转换为xls
我正在尝试使用vba宏或python代码将xlsx文件转换为xls。到目前为止,我可以使用以下代码获得有关转换单个文件夹中文件的帮助:在Excel VBA或Python中的文件夹和子文件夹中将xlsx文件转换为xls,python,excel,vba,Python,Excel,Vba,我正在尝试使用vba宏或python代码将xlsx文件转换为xls。到目前为止,我可以使用以下代码获得有关转换单个文件夹中文件的帮助: Sub ProcessFiles() Dim Filename, Pathname, saveFileName As String Dim wb As Workbook Dim initialDisplayAlerts As Boolean Pathname = "" Filename = Dir(Pathname & "*.xlsx") init
Sub ProcessFiles()
Dim Filename, Pathname, saveFileName As String
Dim wb As Workbook
Dim initialDisplayAlerts As Boolean
Pathname = ""
Filename = Dir(Pathname & "*.xlsx")
initialDisplayAlerts = Application.DisplayAlerts
Application.DisplayAlerts = False
Do While Filename <> ""
Set wb = Workbooks.Open(Filename:=Pathname & Filename, _
UpdateLinks:=False)
wb.CheckCompatibility = False
saveFileName = Replace(Filename, ".xlsx", ".xls")
wb.SaveAs Filename:=Pathname & saveFileName, _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
wb.Close SaveChanges:=False
Filename = Dir()
Loop
Application.DisplayAlerts = initialDisplayAlerts
End Sub
子进程文件()
Dim文件名、路径名、将文件名另存为字符串
将wb设置为工作簿
Dim initialDisplayAlerts为布尔值
路径名=“”
Filename=Dir(路径名和“*.xlsx”)
initialDisplayAlerts=Application.DisplayAlerts
Application.DisplayAlerts=False
文件名“”时执行此操作
设置wb=Workbooks.Open(文件名:=路径名和文件名_
UpdateLink:=False)
wb.CheckCompatibility=False
saveFileName=Replace(文件名“.xlsx”、“.xls”)
wb.SaveAs文件名:=路径名和保存文件名_
文件格式:=xlExcel8,密码:=“”,WriteResPassword:=“”_
ReadOnlyRecommended:=False,CreateBackup:=False
wb.Close SaveChanges:=False
Filename=Dir()
环
Application.DisplayAlerts=初始显示警报
端接头
我现在试图将其推广到给定文件夹中的所有子文件夹
更重要的是,我正在尝试构建一个宏,它执行以下操作:
Maddy您可以在Python中这样做,如下所示。这将从单个文件夹中获取所有
xlsx
文件,并使用相同的名称以xls
格式写入:
import win32com.client as win32
import glob
import os
excel = win32.gencache.EnsureDispatch('Excel.Application')
for excel_filename in glob.glob(r'c:\excel_files_folder\*.xlsx'):
print excel_filename
wb = excel.Workbooks.Open(excel_filename)
wb.SaveAs(os.path.splitext(excel_filename)[0] + '.xls', FileFormat=56, ConflictResolution=2)
excel.Application.Quit()
其中,56
是要使用的格式编号,这些编号列在
要在整个目录结构上执行此操作,可以使用
os.walk
,如下所示:
import win32com.client as win32
import os
excel = win32.gencache.EnsureDispatch('Excel.Application')
for dirpath, dirnames, filenames in os.walk(r'c:\excel_files_folder'):
for filename in filenames:
name, ext = os.path.splitext(filename)
if ext == '.xlsx':
wb = excel.Workbooks.Open(os.path.join(dirpath, filename))
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
excel.DisplayAlerts = False
wb.SaveAs(os.path.join(dirpath, name + '.xls'), FileFormat=56, ConflictResolution=2)
excel.Application.Quit()
请每个问题问一个具体问题。例如,“如何在excel vba中递归枚举xlsx文件”,“如何在excel vba中获取用户输入”。每个问题只要求一种编程语言。Hi Kay..按照建议进行了更改。谢谢Martin。这在某种程度上是可行的,但它会弹出兼容性检查器并等待我的回答。此外,如何运行问题中提到的子文件夹。您的代码似乎只有一条路径。您可以尝试添加
ConflictResolution
参数。我已更新以提供子文件夹解决方案。即使使用ConflictResolution参数,我正在获取每个文件的兼容性检查器弹出窗口。是否有任何方法可以抑制这些弹出窗口并顺利运行整个过程,而无需手动单击“继续”或“取消”以实现兼容性?请尝试添加wb.DoNotPromptForConvert=True
抱歉,Martin,即使这样也无法抑制弹出窗口。