使用 openpyxl 将打印标题添加到工作表

Adding print titles to a worksheet using openpyxl

我无法使用 openpyxl 向我的 Excel 工作表添加打印标题。命名范围已正确创建,但未正确成为打印标题的命名范围。问题似乎是名为 range 的打印标题的范围不正确(至少,如果我理解正确的话)。如果我在 Excel 中手动创建打印标题,则范围不是工作表名称,而是始终是 'Workbook'。这是我正在使用的代码的相关片段:

wb = Workbook()
ws = wb.active
ws.add_print_title(1, rows_or_cols='rows')

据我所知,add_print_title 只需要添加到命名范围的行数或列数以及是否正在添加行和列。就像我说的,这会正确地创建一个命名范围,它只是不会将该命名范围放入打印标题中。也许我遗漏了一些愚蠢的东西,但我已经用尽了所有 Google 搜索和我的一点点知识。

我不确定我们(能够)支持它的程度如何,因为它似乎使用了规范中未涵盖的内容。这个方法我自己没用过所以不是很熟悉

请提交包含两个文件的错误:openpyxl 生成的内容;它应该是什么。

根据测试用例,您正确调用它:

def test_print_titles():
    wb = Workbook()
    ws1 = wb.create_sheet()
    ws2 = wb.create_sheet()
    ws1.print_title_rows = '1:2'  # NOTE this was depricated, old code was ws1.add_print_title(2)
    ws2.print_title_cols = '1:3'  # NOTE: this replaces depricated add_print_title, code was ws2.add_print_title(3, rows_or_cols='cols')

    def mystr(nr):
        return ','.join(['%s!%s' % (sheet.title, name) for sheet, name in nr.destinations])

    actual_named_ranges = set([(nr.name, nr.scope, mystr(nr)) for nr in wb.get_named_ranges()])
    expected_named_ranges = set([('_xlnm.Print_Titles', ws1, 'Sheet1!:'),
                                 ('_xlnm.Print_Titles', ws2, 'Sheet2!$A:$C')])
    assert(actual_named_ranges == expected_named_ranges)

目前这似乎是一个已知问题,但已修复,因此下一个版本应该会解决它。您现在可以通过自己编辑文件来修复它,如下所示:

https://bitbucket.org/openpyxl/openpyxl/pull-request/47/fix-issue-417-creating-print-titles/diff