如何使用Python Azure Webjob将xls转换为xlsx

时间:2019-03-06 07:30:39

标签: python excel azure-webjobs

我需要能够使用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来完成此任务的任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

在Windows的Azure WebApps上,由于存在一个称为Azure Web App沙盒的安全环境,该环境将限制许多操作,包括Win32k.sys (User32/GDI32) Restrictions。因此,您无法通过win32com调用任何导致问题的COM组件。

在纯Python中,有很多将xls转换为xlsx的灵魂,例如以下常见的两种。

  1. 通过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')
    
  2. 通过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。