通过Python模块xlwt更改xls文件中的默认分页符

5 投票
1 回答
3132 浏览
提问于 2025-04-18 03:53

我正在尝试使用Python模块xlwt来编辑分页符。

(是的,我找到过一个很相似的问题,xlwt - 如何在Excel文件中添加分页符?,但它没有完全解决我的问题。)

这里有一些代码,但结果并不是我预期的:

import xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('Report')
ws.write(0,0, '0 here')
ws.write(43,12, '12 here')
ws.horz_page_breaks = [(44,0,12),]
wb.save('sample.xls')

这段代码确实创建了行分页符,但列似乎有一个默认的分页符(第二页从第‘K’列开始,也就是第10列)。

有没有人能告诉我我哪里做错了,或者怎么才能设置一个严格的分页符呢?

附注:有人建议我看看openpyxl库,但我没有找到任何关于如何设置分页符的文档或示例。

更新:
我发现了一些额外的信息。Excel中有一个自动分页符,是无法删除的(在这里说的 http://office.microsoft.com/en-au/excel-help/insert-move-or-delete-page-breaks-in-a-worksheet-HP010021539.aspx),但可以通过拖动将其变为手动分页符。
使用worksheet.vert_page_break,我可以设置一个比自动分页符更小的垂直分页符。但这并没有解决我的问题。

如果有办法用xlwt将自动分页符变为手动分页符,那将对我很有帮助。

1 个回答

5

经过几个月的研究(这其实不是个紧急问题),我找到了一个解决方案,使用的是xlsxwriter。你可以看看页面设置。虽然它的功能没有达到理想的效果,但它提供了一种处理分页的方法。下面的代码可以改变工作表的默认分页:

import xlsxwriter
import random
wb = xlsxwriter.Workbook('page_breaks.xlsx')
ws = wb.add_worksheet('Sample page')

headers = ['header1', 'header2']
# set headers
for col, header in enumerate(headers):
    ws.write(0+1, col+1, 'header'+str(col))

# let it be 300 rows of data
for row in xrange(2,302):
    ws.write(row, 1, row)

# fill table with some random data
for _ in xrange(3000):
    row = random.randrange(2, 302)
    col = random.randrange(2, 16)
    ws.write(row, col, 'X')

# print_area(), set_paper() and fit_to_pages() do the trick
ws.print_area(1, 1, 301, 15)
ws.set_paper(9)  # set A4 as page format
pages_horz = 1
pages_vert = 4
ws.fit_to_pages(pages_horz, pages_vert)

wb.close()

如果你想在页面上显示一定数量的行,你需要注意行的高度,并根据这个选择parges_vert。列也是一样的处理方式。

附注:我把xlwt换成了xlsxwriter,因为我需要图表和一些xlwt没有的其他功能,而且XlsxWriter的文档非常好。但这并不意味着xlwt不好。我想xlwt也有类似的功能,比如print_area()、set_paper()和fit_to_pages()。

再附注:如果我的回答得到点赞,或者没有更好的答案出现,我会用绿色勾勾标记这个回答。

撰写回答