使用Win32com库从Python脚本保存Excel文件

时间:2019-05-02 10:00:38

标签: python excel path win32com

我正在使用win32com.client库打开xlsm文件并将其保存到xls文件。是的,我知道有些人可能会提出这样的问题,即不应该保存为旧格式,但这是企业的要求-文件的接收者大多使用旧的Excel版本,因此将其转换为新的Excel版本不是这种选择。

回到问题。进行转换的代码如下:

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(self.dicData["report_file_xlsm"])
excel.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs(r'output.xls', FileFormat=56, ConflictResolution=2)
excel.Application.Quit()

,它正在工作。但是,我想将输出路径替换为由脚本生成的值,形式为固定的输出文件夹路径加上输出文件的生成名称。输出文件夹的路径保存在脚本启动时读取的json中,并且在json文件中看起来像这样:

C:\\DATA\\Program\\Output

该文件也是通过命令自动生成的

os.getcwd()

“另存为”命令的最终版本应为

wb.SaveAs(output_file, FileFormat=56, ConflictResolution=2)

其中output_file是通过将输出路径与脚本生成的输出文件名连接而创建的字符串变量。问题是这种形式的另存为命令会生成异常:

(-2147352567, 'Exception occurred.', (0, 'Microsoft Excel',
"'C:\\//DATA/Program/Output/' cannot be accessed. The file may be
corrupted, located on a server that is not responding, or read-only.",
'xlmain11.chm', 0, -2146827284), None)

打开命令对我来说有点奇怪:

wb = excel.Workbooks.Open(self.dicData["report_file_xlsm"])

输入文件也以字符串类型的字典条目的形式提供,可以正常工作。

1 个答案:

答案 0 :(得分:0)

使用pathlib库解决了问题。

使用以下命令创建output_file变量

output_file = pathlib.Path('{}\{}.xls'.format(output_folder,output_file_name)

然后按以下方式使用变量output_file

wb.SaveAs(str(output_file), FileFormat=56, ConflictResolution=2)

我不知道这是否是最合适的解决方案,但是它可行。