Как конвертировать xls в xlsx с помощью Python Azure Webjob - PullRequest
0 голосов
/ 06 марта 2019

Мне нужно иметь возможность конвертировать xls в файлы xlsx с помощью Python и запускать сценарий в качестве веб-задания Azure. Я могу выполнить работу на локальном компьютере с помощью следующего кода:

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 я получаю следующую ошибку:

pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)

Возможно, из-за того, что (очевидно) не установлен Excel на компьютере с веб-заданием Azure.

Я попробовал другие подходы к конвертации файлов, как описано здесь: как конвертировать xls в xlsx

К сожалению, некоторые из xls-файлов имеют значения ячеек, которые начинаются с «+» - знак get интерпретируется как формула, что приводит к ошибке. При преобразовании ячейки xls-файла в ячейку фактическое значение этих ячеек теряется.

Буду очень признателен за помощь в решении этой задачи с использованием Python в качестве веб-задания Azure.

1 Ответ

0 голосов
/ 07 марта 2019

В веб-приложениях Azure для Windows существует безопасная среда, называемая изолированной программной средой веб-приложения Azure, которая ограничивает многие операции, включая Win32k.sys (User32/GDI32) Restrictions.Таким образом, вы не можете вызывать какие-либо компоненты COM через win32com, которые вызывают вашу проблему.

В чистом 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, вам нужно использовать виртуальную машину Windows Azure для запуска сценария и интеграции с вашим WebApp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...