我尝试找使用C#修改word文件的方法时到处查找都是通过office的com组件来进行操作,这对客户机要求就是一定要有装office,wps低版本也行但是经常会有窗口打开后关闭不了的情况,而且通过com组件调用效率也不高,所以我写了一个简单的OpenXml的扩展类,目前只有通过在指定标签位置插入内容的功能。
这是使用时测试用的代码(浓厚的AI风格,因为就是AI写的O(∩_∩)O哈哈~),测试的时候我发现第一次调用扩展方法耗时会达到几百毫秒后续调用就基本上只有几十毫秒,具体原因没分析出来,但是无伤大雅挂个Task.Run()跑就完事了O(∩_∩)O哈哈~
private void Button_Click(object sender, RoutedEventArgs e)
{
//var ticks = Stopwatch.StartNew();
if (File.Exists(tempPath))
{
File.Delete(tempPath);
}
File.Copy("文档.docx", tempPath);
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open(tempPath, true))
{
wordDoc.InsertTextAtBookmark("cs","文本。。。。。。。。。。。。。");
wordDoc.InsertImageAtBookmark("img", "cs.png", ImagePartType.Png);
var table = new System.Data.DataTable();
table.Columns.Add("测试1");
table.Columns.Add("测试2");
table.Rows.Add(1, 2);
table.Rows.Add(3, 4);
wordDoc.InsertTableAtBookmark("table", table);
}
//ticks.Stop();
//Log($"第一次耗时{ticks.ElapsedMilliseconds}ms");
//ticks.Start();
//Log(QuickEditSuiteAPI.Word.WordHelper.InsertTextAtBookmark(
tempPath, "cs", "输入"));
//ticks.Stop();
//Log($"第二次耗时{ticks.ElapsedMilliseconds}ms");
//ticks.Start();
//Log(QuickEditSuiteAPI.Word.
WordHelper.InsertImageAtBookmark(tempPath, "img", "cs.png", ImagePartType.Png));
//ticks.Stop();
//Log($"第三次次耗时{ticks.ElapsedMilliseconds}ms");
//ticks.Start();
//var table = new System.Data.DataTable();
//table.Columns.Add("测试1");
//table.Columns.Add("测试2");
//table.Rows.Add(1,2);
//table.Rows.Add(3,4);
//Log(QuickEditSuiteAPI.Word.WordHelper.
InsertTableAtBookmark(tempPath, "table", table));
//ticks.Stop();
//Log($"第四次次耗时{ticks.ElapsedMilliseconds}ms");
Process.Start(new ProcessStartInfo(tempPath) { UseShellExecute = true });
}
这是测试用的.docx文档标签:

这是执行后的效果:

这个OpenXml只能用来打开.docx文件,.doc是不行的(docx里面是xml,doc不是)。
下面是gitee仓库地址
1018

被折叠的 条评论
为什么被折叠?



