Excel不按预期支持共享公式(由OpenXML SDK https://www.microsoft.com/en-us/download/details.aspx?id=30425创建):
在打开或保存文件时会引发错误,有时会出现以下错误:“一个或多个公式...超出了允许的8192个字符的限制”
另一方面,以下共享公式可以正常工作:
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
还有其他人遇到过吗?
答案 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可以完美地处理它。看起来像“修复起来太复杂”或“修复错误太冒险”。
由于他们建议我创建一个“用户语音”条目,因此您可以在此处投票: