Как я могу добавить изображение в заголовок файла xlsx, используя xlsxwriter и python? - PullRequest
2 голосов
/ 26 марта 2019

Я хочу добавить изображение в заголовок xlsx, но оно ничего не показывает в сгенерированном файле (наше приложение выбирает .csv, затем конвертирует в .xlsx, используя .py файл с xlsxwriter, а затем в .pdf, используя команда libreoffice)

Мы уже пробовали использовать разные форматы и размеры изображений, но это не имело значения.

Также пробовал с примерами из библиотеки (https://xlsxwriter.readthedocs.io/example_headers_footers.html?highlight=set_header) без удачи.

Мы использовали worksheet.insert_image(), он добавляет изображение, но не в заголовок. Это наш текущий результат: https://ibb.co/QNXv8bM

Мы хотим добавить изображение непосредственно в заголовок (возможно, используя set_header()), но пока наши попытки с помощью этого метода не дали никаких результатов. Когда мы используем set_header() для размещения изображения, оно ничего не показывает в заголовке.

Вот фрагмент файла python, который мы используем:

def create_worksheet(workbook, data, image, p_header_text):
    '''
    Creates and formats worksheet
    :param workbook: Main workbook
    :type workbook: xlsxwriter.Workbook
    :param data: dict with data to use in the worksheet
    :type data: dict
    data example:
    data = {'headings': [head1, head2, ..., headn], 'rows': [[data1, ..., datan], ...]}
    :return: Nothing
    '''
    worksheet = workbook.add_worksheet()
    ### Page Setup
    worksheet.set_margins(top=1.4)
    worksheet.set_landscape()
    worksheet.hide_gridlines(2)
    #worksheet.set_paper(9)  # 9 = A4
    worksheet.fit_to_pages(1, 0)
    ### Header and footer
    header_text = p_header_text
    #worksheet.set_header('&C&16&"Calibri,Bold"{}'.format(header_text))
    worksheet.set_header('&L&G', {'image_left': '/home/reports/LTA-logo.jpg'})


    worksheet.set_footer('&L&D&RPage &P of &N')
    #worksheet.insert_image('A1', '/home/reports/LTA-logo.jpg', {'x_offset': 0, 'y_offset': 0})
    #worksheet.set_header('&C&G', {'image_left': '/home/reports/LTA-logo.jpg'})

    ### Create table
    create_table(worksheet, data)

Примечание : worksheet.set_header('&C&16&"Calibri,Bold"{}'.format(header_text)) работает нормально, показывает текст в заголовке. Проблема в том, когда мы пытаемся поместить изображение ...

Ожидаемый результат - отображение изображения в заголовке с выравниванием по левому краю, как показано на этом рисунке: https://ibb.co/vQTytK2

Примечание 2 : по деловым причинам (компания) я не могу показать данные на экранах печати

1 Ответ

2 голосов
/ 26 марта 2019

Должно работать с XlsxWriter.Вам просто нужно правильно построить строку формата с левой частью &L и центральной частью &C.

Например:

import xlsxwriter

workbook = xlsxwriter.Workbook('headers_footers.xlsx')
worksheet = workbook.add_worksheet('Image')

# Adjust the page top margin to allow space for the header image.
worksheet.set_margins(top=1.3)

worksheet.set_header('&L&[Picture]&C&16&"Calibri,Bold"Revenue Report',
                     {'image_left': 'python-200x80.png'})

workbook.close()

Обратите внимание, я используюболее явный &[Picture] в примере, но &G также работает.

Вывод:

enter image description here

...