使用openpyx向工作表添加打印标题

2024-04-24 09:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 代码名称add标题wstitlerange手动
2条回答

我不确定我们(能)支持它有多好,因为它似乎使用了规范中没有涵盖的内容。我自己从来没有用过这种方法,所以我对它不太熟悉。在

请提交一个包含两个文件的bug: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!$1:$2'),
                                 ('_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

相关问题 更多 >