通过以下方式从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()
现有工作表中的公式和图表链接将另存为值。
如何覆盖此行为以保留公式和图表链接?
发布于 2014-01-04 03:00:22
Openpyxl1.7包含了几个处理公式的改进,以便在阅读时保留它们。使用guess_types=False
可以防止openpyxl尝试猜测单元格的类型,如果您需要值而不是公式,则1.8包含data_only=True
选项。
希望保留2.x系列中的图表。
发布于 2014-01-06 13:51:08
在这里,我只讨论问题的“保留公式”部分。
我尝试使用openpyxl 1.8,它确实成功地读取了公式,但当我试图保存一个副本时,它崩溃了。(损坏似乎与样式有关,而与公式无关。)
在任何情况下,我建议(在openpxyl更进一步之前)将这些公式映射到一个新的xlsxwriter.Workbook对象。我已经成功地使用该模块创建了新的xlsx工作簿(带有格式和公式),并且不知道如何将格式从openpyxl对象转换为xlsxwriter对象,我相信这将是一个可行的解决方案,至少可以保留公式。
现在,要做到这一点(这是我想做的,也是我自己做的)并不是非常简单,因为有了shared formulas。我不得不写一个工具来“解除共享”这些共享的公式,转置它们,并将它们应用于引用它的每个单元格。
人们可能首先会认为,这种方法通过添加一堆公式来造成效率低下,而以前只有对现有公式的引用。但是,我尝试使用xlsxwriter编写这些“多余的”公式,然后使用openpyxl再次读取该工作表。我发现公式再次被读入为共享的,因此xlsxwriter或Excel应用程序本身正在执行此优化。(当然,人们可以很容易地找出是哪一个;我只是还没有。)
如果有需求,我很乐意发布我的去共享和转置的解决方案;目前它被集成到一个更大的模块中,我必须创建一个独立的版本。一般来说,我使用了ecatmur的response to this question中讨论的记号赋予器中的分流堆码工具来解析公式,这是转置公式的最困难的部分(当然,如果你想推断共享公式在另一个“宿主单元”中的样子,你必须这么做)。
发布于 2014-01-15 02:25:44
在excel中:
Home --> Find & Select --> Replace
Replace All: "=" with "spam"
在python中:
Run python script to update excel sheets
在excel中:
Replace All: "spam" with "="
https://stackoverflow.com/questions/20262448
复制相似问题