如何使用 Python Azure Webjob 将 xls 转换为 xlsx
How to convert xls to xlsx with Python Azure Webjob
我需要能够使用 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 文件的单元格值以“+”号开头,并被解释为公式,这会导致错误。逐个单元格转换 xls 文件时,这些单元格的实际值会丢失。
任何帮助 python 作为 Azure WebJob 完成此任务的人都将不胜感激。
在 Windows 的 Azure WebApps 上,由于有一个名为 Azure Web App Sandbox 的安全环境,它将限制许多操作,包括 Win32k.sys (User32/GDI32) Restrictions
。因此,您不能通过 win32com
调用任何导致问题的 COM 组件。
在纯Python中,xls
转xlsx
的方法有很多,比如下面常见的两种。
通过 pip install pyexcel pyexcel-xls pyexcel-xlsx
安装 pyexcel
即可。
import pyexcel as p
p.save_book_as(file_name='<your input file>.xls', dest_file_name='<your output file>.xlsx')
通过 pip install pandas
安装 pandas
即可。
import pandas as pd
dataFrame = pd.read_excel('<your input file>.xls')
dataFrame.to_excel('<your output file>.xlsx', index=False)
注意:以上两种解决方案只能转换这些xls
常见数据类型的文件,如字符串,数字,内容不丰富(图表或图像等)
如果您想通过 win32com
和 Excel.Application
转换内容丰富或没有任何格式更改的 xls
文件,您必须使用 Azure Windows VM 来运行 您的脚本并与您的 WebApp 集成。
我需要能够使用 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 文件的单元格值以“+”号开头,并被解释为公式,这会导致错误。逐个单元格转换 xls 文件时,这些单元格的实际值会丢失。
任何帮助 python 作为 Azure WebJob 完成此任务的人都将不胜感激。
在 Windows 的 Azure WebApps 上,由于有一个名为 Azure Web App Sandbox 的安全环境,它将限制许多操作,包括 Win32k.sys (User32/GDI32) Restrictions
。因此,您不能通过 win32com
调用任何导致问题的 COM 组件。
在纯Python中,xls
转xlsx
的方法有很多,比如下面常见的两种。
通过
pip install pyexcel pyexcel-xls pyexcel-xlsx
安装pyexcel
即可。import pyexcel as p p.save_book_as(file_name='<your input file>.xls', dest_file_name='<your output file>.xlsx')
通过
pip install pandas
安装pandas
即可。import pandas as pd dataFrame = pd.read_excel('<your input file>.xls') dataFrame.to_excel('<your output file>.xlsx', index=False)
注意:以上两种解决方案只能转换这些xls
常见数据类型的文件,如字符串,数字,内容不丰富(图表或图像等)
如果您想通过 win32com
和 Excel.Application
转换内容丰富或没有任何格式更改的 xls
文件,您必须使用 Azure Windows VM 来运行 您的脚本并与您的 WebApp 集成。