问题标签 [spreadsheetml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
203 浏览

xml - XSLT 1.0 - 使用基于单独 XML 元素的两个表构建 XML 电子表格

我需要从包含以单独元素结构化的数据的 XML 文档(使用 XSLT 1.0)以某种格式构建 XML 电子表格 (SpreadsheetML) 文件。一个简化的示例如下:

所需的输出应该在 Excel 工作表上布置为两个单独的“表格”,其中一个位于另一个的中间 - 如屏幕截图所示:

在此处输入图像描述

问题是,通过 XSLT 转换,我需要逐一打印行,并且必须在打印行时打印所有单元格 - 因此,对于某些行(例如索引 4、5、6、7),我需要添加一些特殊的单元格,我将从SummaryTableXML 元素中获取它们的值。

换句话说,输出 XML 格式是这样的:

问题是我无法控制详细信息表中的行数 - 只需对它们执行 'for-each' 并使用position().

然而,可能是太少(例如只有一个行元素),在这种情况下for-each永远不会迭代到索引 4、5、6、7,所以我的汇总表不会被打印 - 这种情况下的预期输出应该是:

在此处输入图像描述

我正在考虑执行 for-each 循环指定次数(例如 7 次),以便我打印出前七行以及汇总表,然后for-each在元素上再次执行循环DetailsTable/row,但跳过前 7 个索引位置,但这似乎是一个令人讨厌的解决方法。

还有其他想法吗?

0 投票
1 回答
1322 浏览

excel - Excel 坚持认为我的 OpenXml 文件有错误

好的,我正在从 DataTable 生成一个 Excel 文件。我生成文件并保存它,没有编译或运行时错误。但是,当我在 Excel 中打开文件时,它会弹出消息:

我们发现“filename.xlsx”中的某些内容存在问题。你想让我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击“是”。

所以我点击Yes。一两秒钟后,它会出现以下消息:

Excel 能够通过修复或删除不可读的内容来打开文件。
修复的记录:格式来自 /xl/styles.xml (Styles)
点击查看日志文件列表修复:C:\file\path\filename.xml

但是如果你点击打开日志,它基本上只是说同样的事情,没有额外的细节。

所以,我想好吧……我刚刚找到了微软漂亮的小 OOXML SDK Validator/Compare 工具。所以我在其中打开“坏”文件,然后运行Validate​​. 它完全成功返回,并表明文件中没有错误。所以我不太确定 Excel 在抱怨什么。 在此处输入图像描述

此外,在允许 Excel “修复”,然后完成打开文件后,工作表的样式和显示都正确,所有数据都已填写,看起来与预期的完全一样。 在此处输入图像描述

这是我用来生成 OOXML 样式表的代码...
(是的,它是 VB.NET,它是一个遗留应用程序。)

这是/xl/styles.xml样式表的内容...

0 投票
2 回答
608 浏览

javascript - 如何在 JavaScript 中使用 XPath 从命名空间 OOXML 中进行选择?

我正在构建一个工具来使用 XPath 表达式从用户指定的 XML 文件中获取数据。简单的 XML 文件和具有单个命名空间的 XML 文件可以正常工作,但我没有让以下 XML 文件在不同层次结构级别覆盖相同前缀的情况下工作:

我正在测试的 xpath 是

这是解析和搜索节点的代码:

编辑:删除代码中的错字(与实际问题无关)

0 投票
1 回答
34 浏览

sdk - cognosdotnet_10_2 和电子表格ML 输出

尝试使用 cognosdotnet_10_2.dll 从 Cognos获取电子表格ML 输出。

“Outputpage”数据是 base64 编码的字符串。我正在尝试从 base64string 到 plainText 变量中获取可读的内容。我基本上已经尝试过大多数基本编码,结果看起来不像标记。

有谁知道接下来要尝试什么?

0 投票
0 回答
263 浏览

python - 如何使用 python 将 Excel SpreadsheetML 转换为 .xlsx

我是 python 新手,所以我有这个 XML 文件,我可以使用 Excel 轻松打开, 这是 XML 文件

我想将它转换为 .xlsx 或任何兼容的格式,以便能够对其使用 openpyxl 模块,以便我可以轻松阅读它,有没有办法在 python 上做到这一点?任何建议将不胜感激谢谢。

0 投票
1 回答
135 浏览

c# - OpenXML 验证错误说 knownFonts 属性未声明,但它是

运行时出现验证错误OpenXmlValidator.Validate()

未声明“http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac:knownFonts”属性。

我使用以下代码注册我的字体。

我的style.xml看起来像这样:

谁能明白我为什么会收到这个错误?我什至找不到有关该KnownFont属性用途的信息。这可能与我拥有x14ac:knownFonts而不是的事实有关ac:knownFonts吗?

0 投票
0 回答
63 浏览

excel - OpenXML SDK - C# - 计算链/将单元格标记为已编辑以强制在打开移动/Web 时完全重新计算

用例

我有一个 Windows 服务,它利用 OpenXML sdk 每天将表格定价数据写入 Excel 工作表。此报告可通过文件共享获得,也可作为附件发送。工作簿中还有其他几张表,其中包含引用通过 OpenXML 写入的数据以进行可视化等的公式。

如果未设置 ForceFullCalculation 属性,则公式不会在打开时更新,直到对公式依赖链中最靠下的单元格进行编辑。

document.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;

此行解决了所有计算问题,因为所有公式在打开时都会重新计算。如果在 Excel 桌面客户端中打开。

问题

在移动 Office 应用程序、移动 Excel 应用程序、Excel Online 和电子邮件预览应用程序上,在对触发重新计算的单元格进行编辑之前,不会计算公式。全部显示为 N/A。

努力解决

对于移动/网络/附件查看器,尚未解决此问题的事情:

  • ForceFullCalculation = true
  • CalculationOnSave = true
  • CalculationMode = CalculateModeValues.Auto(Excel 自动计算模式)
  • 移除CalculaitonChainPart元素。
  • 解压缩 xlsx 并从 CalcChain 文件中删除/编辑/删除单元格数据。
  • 通过非桌面 Excel 版本手动单击“计算工作簿”/“计算单元格”/“计算表”按钮
  • 在打开之前将文件发布到 sharepoint online / office 365

什么“解决”了这个问题

  • 在分发工作表之前在桌面版 Excel 上打开文件。这会起作用,但需要手动干预,这对于基于服务的应用程序是不切实际的。
  • 在非桌面版本的 Excel 上打开文件并在“公式树”中编辑单元格值。

目标

我希望有人可以对这个问题提供额外的见解,并解决这是否可以使用 OpenXML sdk 解决。如果 excel 的非桌面版本不尊重该ForceFullCalculation属性,是否可以通过 XML 进行任何操作以使 excel 将单元格视为脏并运行重新计算?

理想情景

我的服务创建一个新的 xlsx 文件并通过 OpenXML sdk 写入数据。然后将该文件写入文件共享并作为电子邮件附件发送。收件人可以在桌面、移动设备、Web 和不太重要的附件查看器上打开工作簿,并查看公式的结果而不是 N/A,直到找到要编辑的特定单元格以诱使 Excel 更新所有值。

补充说明

我痛苦地意识到这是对 Excel/OpenXML 的误用——像 tableau/power BI 这样的报告解决方案更适合我的用例,但这是最初由业务用户创建的工作表,并且一直是手动工作量一个人每天更新多年。自动化工作表的日常数据输入和分发允许我们的用户继续使用引用此工作表的其他工作表,并且不需要花费大量精力来重新定义整个过程,因为基本上可以归结为人们每天早上查看的报告。

最终,我们会有更好的解决方案,但这是一项缓慢而持续的努力。我希望有一种前进的方式可以满足现在的需要。

感谢您的阅读和任何帮助:)

示例代码