我无法使用openpyxl将打印标题添加到Excel工作表中。命名范围已正确创建,但它不能正确成为打印标题的命名范围。问题似乎是名为range的打印标题的范围不正确(至少,如果我正确理解它)。如果我在Excel中手动创建打印标题,而不是作为工作表名称的范围,则范围始终是“工作簿”。这是我使用的代码的相关摘要:
wb = Workbook()
ws = wb.active
ws.add_print_title(1, rows_or_cols='rows')
据我所知,add_print_title
只需要添加到命名范围的行数或列数以及是否添加行和列。就像我说的那样,这会正确地创建一个命名范围,它只是不会将命名范围变成打印标题。也许我错过了一些愚蠢的事情,但我已经用尽所有谷歌搜索和我的一点点知识。
答案 0 :(得分:1)
根据测试用例,您正确地调用它:
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
答案 1 :(得分:-1)
我不确定我们(可以)支持这个有多好,因为它似乎使用了规范中未涉及的内容。我自己从未使用过这种方法,所以我对它并不熟悉。
请提交两个文件的错误:openpyxl生成的内容;应该是什么。