我需要能够使用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来实现此任务的任何帮助都将非常感激。
在Azure WebApps for Windows上,由于存在一个名为Azure Web App Sandbox的安全环境,它将限制许多操作,包括Win32k.sys (User32/GDI32) Restrictions
。因此,您无法通过引发问题的win32com
调用任何COM组件。
在纯Python中,有许多解决方案可以将qazxsw poi转换为qazxsw poi,例如下面的常见两个。
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
文件,则必须使用Azure Windows VM来运行脚本并与WebApp集成。