你的理解基本正確:將「遍歷表格」拆分為多個任務並行,理論上可線性縮短耗時(受限於 CPU 核心數、記憶體頻帶、COM 介面序列化)。
COMException (RPC_E_WRONG_THREAD)。.docx 無法被多進程/執行緒同時寫入。.docx (OOXML),無 COM 依賴,支援真正多執行緒並行讀寫 XML 部分。using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Threading.Tasks;
var files = Directory.GetFiles(inputDir, "*.docx");
Parallel.ForEach(files, file => {
using (var doc = WordprocessingDocument.Open(file, true)) {
var tables = doc.MainDocumentPart.DocumentBody.Descendants<Table>();
foreach (var table in tables) {
// 並行處理每個表格的行/儲存格
Parallel.ForEach(table.Descendants<TableRow>(), row => {
foreach (var cell in row.Descendants<TableCell>()) {
// 修改 cell 內容
}
});
}
doc.MainDocumentPart.Document.Save();
}
});
「先優化演算法與工具選型,再加並行」是通用真理。