阅读工作表并保留条件格式

时间:2015-02-27 23:55:46

标签: python excel openpyxl

我正在尝试使用openpyxl阅读excel工作表。当我这样阅读时,我想我正在丢失工作表中的条件格式信息:

xl = openpyxl.load_workbook(filename)

当我读取文件中的所有单元格并保存时。我得到一个电子表格,其中没有实现条件格式。

我可以找到很多方法在电子表格中添加条件格式 http://openpyxl.readthedocs.org/en/latest/formatting.html

但是我找不到在现有工作表中读取条件格式信息的方法。

我用于执行读写的特定代码是

import openpyxl as xl

xlf = xl.load_workbook(r'd:\test\book1.xlsx')
sh = xlf.get_sheet_by_name('Sheet1')
allcells = sh.get_cell_collection()

wb = xl.Workbook()
ws = wb.create_sheet()

for c in allcells:
    row = c.row
    col = xl.cell.column_index_from_string(c.column)
    new_cell = ws.cell(row=row, column=col)
    new_cell.value = c.value
    new_cell.style = c.style.copy()

ws.title = 'test'
wb.save(r'd:\test\book1w.xlsx')

1 个答案:

答案 0 :(得分:4)

我真的很亲密,但我无法保持这种颜色。仍然存在错误,但如果不是填充选项,则至少以下情况会添加保留条件格式规则:

for range_string in sh.conditional_formatting.cf_rules:
    for cfRule in sh.conditional_formatting.cf_rules[range_string]:
        ws.conditional_formatting.add(range_string, cfRule)

使用这一个衬垫(但相同的最终结果)也是如此:

ws.conditional_formatting.update(sh.conditional_formatting.cf_rules)

现在,如果你在excel中打开Manage Rules,那么规则就在那里,但是当你打开文件时它需要自动修复并且我失去了颜色。这是超级有用的日志(这里有讽刺):

<repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet2.xml</repairedRecord></repairedRecords>

当我尝试直接复制conditional_formatting的三个属性时,我得到了类似的结果:

ws.conditional_formatting.cf_rules = sh.conditional_formatting.cf_rules.copy()
ws.conditional_formatting.max_priority = sh.conditional_formatting.max_priority
ws.conditional_formatting.parse_rules = sh.conditional_formatting.parse_rules.copy()

我一直在寻找source code的想法。

修改

有一个非常简单的选择。不要创建一个全新的工作簿和工作表,并从头开始处理它们。只需根据需要修改原始文件,然后将其另存为其他名称。或者您甚至可以将其另存为另一个名称来创建副本,然后修改副本。这将保留所有格式规则。