Open XML Excel共享公式不支持某些公式

时间:2019-02-12 16:52:01

标签: .net excel openxml

Excel不按预期支持共享公式(由OpenXML SDK https://www.microsoft.com/en-us/download/details.aspx?id=30425创建):

在打开或保存文件时会引发错误,有时会出现以下错误:“一个或多个公式...超出了允许的8192个字符的限制”

另一方面,以下共享公式可以正常工作:

  • “ = VLOOKUP(A1; Sheet2!$ A:$ B; 2; 0)”(使用带美元的绝对引用)。
  • “ = A1”或“ = $ A1”(将公式扩展到整个列时)

XML结构如下:

B2: <c r="B2"><f t="shared" ref="B2:B3" si="0">VLOOKUP(A2,Sheet2!A:B,2,0)</f><v></v></c>
B3: <c r="B3"><f t="shared" si="0"></f><v></v></c>

用美元代替一个公式,它将起作用。通过结构化引用,不会,等等。

当通过Excel UI使用此类公式时,扩展公式将导致是否创建共享公式,具体取决于是否支持该公式(我想)。问题是应支持所有公式,否则应在某个地方进行记录。


  

当公式是共享公式(共享t值)时,则此值   指示此特定单元格的公式所属的组。   一组共享公式中的第一个公式保存在f中   元件。这被视为“主”公式单元格。后续的   共享此公式的单元格无需在公式中编写公式   f元素。而是,特定单元的属性si值为   用于计算公式表达式应基于   单元格相对于主配方单元格的相对位置。

参考:https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.cellformula.aspx

还有其他人遇到过吗?

1 个答案:

答案 0 :(得分:0)

与Microsoft支持人员进行了长时间的交谈之后,他们的答案是:

  

首先,即使我们清楚地理解,这样做更容易   具有共享公式,这不是Excel的工作方式。 Excel本身可以   不要创建您要创建的共享公式。如果你   在Excel中输入相同的公式,填写并保存,   重复公式而不是共享公式。

(是的,但是Excel在工作时也会创建共享公式,我的问题是,并非所有公式都可以工作。)

  

错误很明显Excel无法使用它,这是   在2007年及以后的所有版本的Excel中保持一致。在这   在一种情况下,作为一种解决方法,您应该模仿Excel并复制   像Excel一样在表格上进行公式计算,而不会出现错误。

我应该如何事先知道Excel是否支持该公式? 微软甚至没有提议官方库来解析Excel公式。我们可以使用看起来很扎实的https://github.com/spreadsheetlab/XLParser,但使用共享公式的重点不是解析公式,而是让Excel进行。

  

可以更改此行为的唯一方法是实施设计更改   进入Excel的行为,但这样做整个倒退   兼容性将一直破坏到2007年的版本。   这不是我们的产品小组有兴趣进行更改的事情。

因此,当保存带有奇怪错误消息的文件时,Excel将继续崩溃...

  

我正在内部进行验证以更好地回答您的问题时,我现在   我的升级团队已明确确认该讨论   有关文件格式处理或内存中处理的详细信息   上述共享公式的Excel不会改变结果。事项   实际上,在某些情况下,不能使用共享公式   许多不同的原因,其中一些可能不明显   从外部Excel。最好的经验法则是已经   概述:当Excel本身不使用共享公式时,不要使用共享公式。   这需要考虑到诸如   公式,无论是绝对引用还是相对引用(如   您使用A:B与$ A:$ B的示例),无论引用是否引用   同一工作表或另一工作表,或在不同的工作簿等中,   然后还要使用哪种公式(一些函数,例如   OFFSET或INDIRECT取决于要遵守的范围   在计算过程中发生变化),以及是先例还是从属   范围/公式表示不使用共享可能更安全   公式。文件格式文档中没有明确说明   什么条件可以使用共享公式。它指定一个文件   读者可能会遇到这样的公式,当发生这种情况时,   可以解决这个问题,但这并不意味着共享公式始终   每当连续范围的单元格包含   公式栏中的公式相同。对于文件编写器来说,它不是   鼓励使用,除非方案仅限于   与Excel编写共享公式时相同。

不过,LibreOffice可以完美地处理它。看起来像“修复起来太复杂”或“修复错误太冒险”。

由于他们建议我创建一个“用户语音”条目,因此您可以在此处投票:

https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/37328965-full-support-for-shared-formula-matching-the-open