我需要能够使用Python将xls转换为xlsx文件,并将脚本作为Azure Webjob运行。 我可以使用以下代码在本地计算机上完成这项工作:
import win32com.client as win32
import os
def xls_2_xlsx(xls_path, xlsx_path):
# Create temp xlsx-File
if os.path.exists(xlsx_path): os.remove(xlsx_path)
excel = win32.DispatchEx("Excel.Application")
excel.Visible = 0
wb = excel.Workbooks.Open(xls_path)
wb.SaveAs(xlsx_path, FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close()
将代码作为Azure Webjob运行时,出现以下错误:
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)
可能是由于(显然)Azure Webjob计算机上没有安装Excel。
我尝试了其他方法来转换文件,如下所述: how to convert xls to xlsx
不幸的是,某些xls文件具有以“ +”开头的单元格值-将get解释为公式,这会导致错误。当按单元转换xls文件单元时,这些单元的实际值会丢失。
对于使用python作为Azure WebJob来完成此任务的任何帮助,将不胜感激。
答案 0 :(得分:0)
在Windows的Azure WebApps上,由于存在一个称为Azure Web App沙盒的安全环境,该环境将限制许多操作,包括Win32k.sys (User32/GDI32) Restrictions
。因此,您无法通过win32com
调用任何导致问题的COM组件。
在纯Python中,有很多将xls
转换为xlsx
的灵魂,例如以下常见的两种。
通过pyexcel
安装pip install pyexcel pyexcel-xls pyexcel-xlsx
。
import pyexcel as p
p.save_book_as(file_name='<your input file>.xls', dest_file_name='<your output file>.xlsx')
通过pandas
安装pip install pandas
。
import pandas as pd
dataFrame = pd.read_excel('<your input file>.xls')
dataFrame.to_excel('<your output file>.xlsx', index=False)
注意:以上两种解决方案只能转换这些xls
文件,这些文件具有常见的数据类型,例如字符串,数字,非丰富内容(图表或图像等)
如果要通过xls
通过win32com
转换内容丰富的Excel.Application
文件,而无需进行任何格式更改,则必须使用Azure Windows VM运行脚本并与之集成您的WebApp。