【问题标题】:reading worksheet and preserving conditional formatting阅读工作表并保留条件格式
【发布时间】:2018-02-23 23:23:48
【问题描述】:

我正在尝试使用 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')

【问题讨论】:

  • 你能提供一些你如何阅读和保存的示例代码吗?另外,如果可能的话,您能否提供指向示例 excel 文件的链接?过去存在条件格式的特定属性的问题。您可能遇到了错误,或者您可能正在保存或阅读它,导致它丢失了条件格式。
  • ConditionalFormatting 对于工作簿中的每个工作表都不同。它可能包括也可能不包括对样式的引用,它们本身在别处定义。与 Excel 文件中的许多内容一样,这使得复制变得极其困难。
  • 这也是我发现的。 cf_rules 有一个dfxID,但我不知道dfx 规则是在哪里定义的。

标签: python excel openpyxl


【解决方案1】:

我真的很接近,但我无法让颜色保持不变。仍然存在错误,但如果不是填充选项,至少以下内容确实添加了保持条件格式规则:

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 的想法。

编辑

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

【讨论】:

  • 这看起来可能会非常接近。但是您需要使用 MS Office OpenXML Productivity Tool 比较生成的文件,以查看缺少的内容或不同之处。可以说复制部分 Excel 文件很少像看起来那么容易。您建议以新名称保存确实是最好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多