擅长:python、mysql、java
<p>在这里,我只讨论问题的“保留公式”部分。</p>
<p>我试着使用openpyxl 1.8,它确实成功地读取了公式,但是当我试图保存一个副本时,它崩溃了。(断裂似乎与样式有关,而与公式无关。)</p>
<p>无论如何,我建议(直到openpxyl更进一步)将公式映射到一个新的xlsxwriter.Workbook对象。我已经成功地使用该模块创建了新的xlsx工作簿(带有格式和公式),在不知道这些格式将如何从openpyxl对象转换为xlsxwriter对象的情况下,我相信这将是至少保留公式的可行解决方案。</p>
<p>因为<a href="https://bitbucket.org/ericgazoni/openpyxl/issue/245/formula-read-issue" rel="nofollow noreferrer">shared formulas</a>,做这件事(我自己也想做)并不是非常简单。我必须编写一个工具来“取消共享”这些共享公式,将它们转换,并将它们应用于引用它的每个单元格。</p>
<p>有人可能会首先认为,这种方法通过添加一组公式(以前只引用现有公式)来创建低效率。不过,我试着用xlsxwriter编写这些“多余”的公式,然后用openpyxl重新读回这张表。我发现这些公式再次以共享的形式读取,因此xlsxwriter或Excel应用程序本身都在进行此优化。(当然,人们很容易就能弄清楚是哪一个,我只是还没有。)</p>
<p>如果有需要的话,我很乐意发布我的解共享和转置解决方案;目前它集成到一个更大的模块中,我必须创建一个独立的版本。不过,一般来说,我使用ecatmur对<a href="https://stackoverflow.com/questions/12929086/parsing-excel-style-formula">this question</a>的响应中讨论的标记器中的分流码工具来解析公式,这是转换它们的最困难的部分(如果要推断共享公式在另一个“宿主单元格”中的外观,当然必须这样做)。</p>