首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用openpyxl在不破坏公式的情况下写入现有的excel文件?

如何使用openpyxl在不破坏公式的情况下写入现有的excel文件?
EN

Stack Overflow用户
提问于 2013-11-28 17:38:54
回答 4查看 12K关注 0票数 9

通过以下方式从Python写入excel文件时:

代码语言:javascript
运行
复制
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()

现有工作表中的公式和图表链接将另存为值。

如何覆盖此行为以保留公式和图表链接?

EN

回答 4

Stack Overflow用户

发布于 2014-01-04 03:00:22

Openpyxl1.7包含了几个处理公式的改进,以便在阅读时保留它们。使用guess_types=False可以防止openpyxl尝试猜测单元格的类型,如果您需要值而不是公式,则1.8包含data_only=True选项。

希望保留2.x系列中的图表。

票数 4
EN

Stack Overflow用户

发布于 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中讨论的记号赋予器中的分流堆码工具来解析公式,这是转置公式的最困难的部分(当然,如果你想推断共享公式在另一个“宿主单元”中的样子,你必须这么做)。

票数 3
EN

Stack Overflow用户

发布于 2014-01-15 02:25:44

在excel中:

代码语言:javascript
运行
复制
  Home --> Find & Select --> Replace

  Replace All: "=" with "spam"

在python中:

代码语言:javascript
运行
复制
  Run python script to update excel sheets

在excel中:

代码语言:javascript
运行
复制
  Replace All: "spam" with "="
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20262448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档