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

问题描述 投票:0回答:1

我需要能够使用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来实现此任务的任何帮助都将非常感激。

python excel azure-webjobs
1个回答
0
投票

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

在纯Python中,有许多解决方案可以将qazxsw poi转换为qazxsw poi,例如下面的常见两个。

  1. 通过xls安装xlsx来做到这一点。 pyexcel
  2. 通过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集成。

© www.soinside.com 2019 - 2024. All rights reserved.