XlsxWriter的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XlsxWriter的使用相关的知识,希望对你有一定的参考价值。

参考技术A 一、功能比较强

相对而言,这是除Excel自身之外功能最强的工具了。比如我就用到了它提供的:字体设置、前景色背景色、border设置、视图缩放(zoom)、单元格合并、autofilter、freeze panes、公式、data validation、单元格注释、行高和列宽设置等等。

二、支持大文件写入

如果数据量非常大,可以启用constant memory模式,这是一种顺序写入模式,得到一行数据就立刻写入一行,而不会把所有的数据都保持在内存中。

一、不支持读取和修改

作者并没有打算做一个XlsxReader来提供读取操作。不能读取,也就无从修改了。它只能用来创建新的文件。我是利用xlrd把需要的信息读入后,用XlsxWriter创建全新的文件。

另外,即使是创建到一半Excel文件,也是无法读取已经创建出来的内容的(信息应该在,但是并没有相应的接口)。因为它的主要方法是write而不是set。当你在某个单元格写入数据后,除非你自己保存了相关的内容,否则还是没有办法读出已经写入的信息。从这个角度看,你无法做到读出->修改->写回,只能是写入->写入->写入。

二、不支持XLS文件

XLS是Office 2013或更早版本所使用的格式,是一种二进制格式的文件。XLSX则是用一系列XML文件组成的(最后的X代表了XML)一个压缩包。如果非要创建低版本的XLS文件,就请移步xlwt吧。

三、暂时不支持透视表(Pivot Table

样式有很多属性,更多具体样式请参考 官方文档 。

workbook.worksheets()用于获得当前工作簿中的所有工作表,这个函数的存在便利了对于工作表的循环操作,如果你想在当前工作簿的所有工作表的A1单元格中输入一个字符创‘Hello xlsxwriter’,那么这个命令就派上用场了。

这个命令是使用xlsxwriter操作Excel的最后一条命令,一定要记得关闭文件。

如何使用 xlsxwriter 和 python 将图像添加到 xlsx 文件的标题?

【中文标题】如何使用 xlsxwriter 和 python 将图像添加到 xlsx 文件的标题?【英文标题】:How can i add an image to a header of a xlsx file using xlsxwriter and python? 【发布时间】:2019-03-26 16:41:47 【问题描述】:

我想在 xlsx 的标题中添加一个图像,但它在生成的文件上没有显示任何内容(我们的应用程序选择一个 .csv,然后使用带有 xlsxwriter 的 .py 文件转换为 .xlsx,然后使用一个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】:

它应该适用于 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 也可以。

输出:

【讨论】:

用您的建议编辑了代码,但仍然没有放置图像:/ 这里是完整脚本的链接(只有 170 行)codeskulptor.org/#user45_bkdvNJiWYy_2.py 也许创建其他 .py 文件以仅在标题中插入图像?还是操作最终的 PDF 并在其中插入图像? 如果您运行我的示例,它是否有效?图片在 XlsWriter 的示例目录中:here。 现在测试,它生成 headers_footers.xlsx 但是当我打开它时它是空白的.. 看截图:ibb.co/G9QGZQR

以上是关于XlsxWriter的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python——xlsxwriter模块的使用

使用 xlsxwriter 合并每隔一个单元格

使用“xlsxwriter”在 Excel 中写入时没有输出

python使用xlsxwriter

使用xlsxwriter模块和xlrd模块操作Excel表格

ImportError: No module named 'xlsxwriter' - 当我使用 Pyinstaller 打包程序时