以以下方式从Python写入excel文件时:
import pandas
from openpyxl import load_workbook
book = load_workbook('Masterfile.xlsx')
writer = pandas.ExcelWriter('Masterfile.xlsx')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])
writer.save()
现有工作表中的公式和图表链接将另存为值。
如何覆盖此行为以保留公式和图表链接?
Openpyxl 1.7包含了一些处理公式的改进,以便在读取时保留它们。使用
guess_types=False
可防止openpyxl尝试猜测单元格的类型,如果需要值而不是公式,则1.8包含data_only=True
选项。希望保留2.x系列中的图表。
在excel中:
在python中:
在excel中:
在这里,我只讨论问题的“保留公式”部分。
我试着使用openpyxl 1.8,它确实成功地读取了公式,但是当我试图保存一个副本时,它崩溃了。(断裂似乎与样式有关,而与公式无关。)
无论如何,我建议(直到openpxyl更进一步)将公式映射到一个新的xlsxwriter.Workbook对象。我已经成功地使用该模块创建了新的xlsx工作簿(带有格式和公式),在不知道这些格式将如何从openpyxl对象转换为xlsxwriter对象的情况下,我相信这将是至少保留公式的可行解决方案。
因为shared formulas,做这件事(我自己也想做)并不是非常简单。我必须编写一个工具来“取消共享”这些共享公式,将它们转换,并将它们应用于引用它的每个单元格。
有人可能会首先认为,这种方法通过添加一组公式(以前只引用现有公式)来创建低效率。不过,我试着用xlsxwriter编写这些“多余”的公式,然后用openpyxl重新读回这张表。我发现这些公式再次以共享的形式读取,因此xlsxwriter或Excel应用程序本身都在进行此优化。(当然,人们很容易就能弄清楚是哪一个,我只是还没有。)
如果有需要的话,我很乐意发布我的解共享和转置解决方案;目前它集成到一个更大的模块中,我必须创建一个独立的版本。不过,一般来说,我使用ecatmur对this question的响应中讨论的标记器中的分流码工具来解析公式,这是转换它们的最困难的部分(如果要推断共享公式在另一个“宿主单元格”中的外观,当然必须这样做)。
相关问题 更多 >
编程相关推荐