aardio 文档

.NET 互操作

命名空间与泛型

只需 import DocumentFormat.OpenXml;,随后通过 DocumentFormat.OpenXml.Packaging、Wordprocessing、Spreadsheet、Presentation、Validation 等访问原生 SDK。不要为这些 .NET 命名空间分别编造 aardio 的 import 路径。

C# 的 obj.Method<T>(args) 在 aardio 中可写成 obj.$Method(T)(args):第一次调用绑定泛型类型,第二次传实际参数。例如已有 workbookPart 时:workbookPart.$AddNewPart(ox.Packaging.WorksheetPart)()。

集合与延迟迭代

dotNet.each 可直接遍历 SDK 的 ChildElements 及验证错误集合。但不能假定每个 IEnumerable<T> 都能直接枚举:本 SDK 的 Descendants() / Descendants<T>() 返回编译器生成的迭代器,直接用 dotNet.each 可能报找不到 GetEnumerator。无需改库,先经 LINQ ToArray<T> 转为数组即可:

import DocumentFormat.OpenXml;
dotNet.import("System.Linq","System.Core");
var ox = DocumentFormat.OpenXml;

var paragraph = ox.Wordprocessing.Paragraph();
var run = ox.Wordprocessing.Run();
run.Append([ox.Wordprocessing.Text("A"), ox.Wordprocessing.Text("B")]);
paragraph.Append([run]);

// $ 符号开头的方法用于实例化 .NET 泛型类或泛型函数(参数指定 .NET 类型或类型名)
var descendants = paragraph.$Descendants(ox.Wordprocessing.Text)();
var toArray = System.Linq.Enumerable.$ToArray(ox.Wordprocessing.Text);
var texts = [];
for i,node in dotNet.each(toArray(descendants)) table.push(texts,node.Text);
return texts; // ["A","B"]

ToArray 会实体化整个序列;巨型文件不要据此构造多个全量副本,应另行采用 SDK 的流式读取或受控遍历。DOM/SDK 对象不当作可跨线程共享的 aardio 普通表。

文件、流与保存

运行时与版本

本扩展库固定内嵌 OpenXML SDK 3.5.1 的 net35 资源,内存加载程序集而不是在运行时下载 SDK。dotNet 默认优先尝试 CLR 4,再尝试 CLR 2;当前资源已在 CLR 4 环境验证。Windows 7 开始已自带 net35,这表示除了已被市场淘汰的古老 Windows XP,所有 Windows 都已直接支持此扩展库,无需额外安装 .NET Framewordk 。

修改库或切换程序集后用干净线程重新导入,避免缓存混用;同一工作流不要另加载不同版本的 SDK OpenXML DLL。

上游资料

仅在需要相关 API 时查阅,注意筛选 SDK 3.x 和实际目标框架;例如 net35 不提供带 CancellationToken 的公开验证重载。

本地库参考刻意不展开全量 SDK 成员,避免 AI 为简单任务载入无关上下文。

Markdown 格式