Я использую шаблоны создания списков продуктов Amazon для создания и обновления списков продуктов на Amazon.Шаблоны Amazon включают макросы Excel для импорта содержимого CSV в шаблон, но я бы предпочел пропустить этот шаг и напрямую клонировать, редактировать и сохранять файл шаблона Excel.
У меня есть код openpyxl, которыйоткрывает шаблон, заполняет ячейки и сохраняет новую копию с заполненной информацией.Мне пришлось отредактировать шаблон, предоставленный Amazon, чтобы позволить openpyxl читать файл;Я скопировал каждый лист из исходного шаблона .xlsm в пустую книгу и сохранил его как .xlsx.За исключением ошибок, которые я подробно опишу через минуту, этот файл все еще может обрабатываться Amazon, поэтому я не думаю, что изменение формата (полностью) виновато.
Вот код, который пишетвыходные файлы:
def create_workbook(chunk, file_count):
'''This creates a single output workbook from a chunk of campaign_dicts.'''
workbook = openpyxl.load_workbook(AMAZON_TEMPLATE_FILENAME)
sheet = workbook["Template"]
rows = []
for campaign_dict in chunk:
rows += create_rows(campaign_dict) # Returns a list of lists of cell values.
write_rows_to_sheet(sheet, rows, TEMPLATE_DATA_STARTING_ROW, TEMPLATE_DATA_STARTING_COL)
workbook.save("output/output" + str(file_count) + ".xlsx")
def write_rows_to_sheet(sheet, rows, starting_row, starting_col):
'''This writes data to a worksheet of an openpyxl workbook, starting from the given coordinates.
The rows for this function should be a list of lists, where each list is a row.'''
for row_number, row in enumerate(rows):
for column_number, cell in enumerate(row):
if isinstance(cell, str):
cell = re.sub(ILLEGAL_CHARACTERS_RE, '', cell)
sheet.cell(row = row_number + starting_row + 1, column = column_number + starting_col + 1).value = cell
return sheet
Проблема в том, что, когда я пытаюсь загрузить любой файл, сгенерированный этим кодом, в Amazon для обработки, он отклоняется со следующим отчетом обработки:
Feed Processing Summary:
Number of records processed 0
Number of records successful 0
original-record-number sku error-code error-type error-message
0 99217 Info The processing report is too long, or has generated too many errors for it to display properly in the Excel sheet. So we have generated the processing report in Text format. The Excel reports are limited to 50,000 errors and 1,000,000 rows of product data.
0 90502 Fatal The file does not contain a worksheet with a template type that is supported for Excel upload. Please save your file in a tab-delimited text file format (*.txt) and upload again.
В качестве обходного пути я обнаружил, что нужно открыть выходной файл в Excel и сразу же сохранить его, не внося никаких изменений в файл или его данные.Я не могу опубликовать фактические файлы до и после (конфиденциальную информацию), но я знаю, что файл определенно изменяется до и после восстановления, несмотря на то, что я не внес никаких изменений при сохранении файла;это просто открыть-сохранить-закрыть.Обратите внимание, что Excel не жалуется на содержимое файла, когда я открываю и сохраняю его.
Что является причиной этого, и как я могу исправить это в коде, чтобы у меня не было этого промежуточного звенашаг?