在过去的两个小时里,我搜索了这个很棒的网站,但找不到类似帖子的解决方案。
我正在从第三方工具创建动态.docx文件。
我需要做的:
- 打开每个文件
- 选择所有内容
- 将内容复制到Windows剪贴板
创建一个Word宏是同步的,因为这两行将为我选择所有内容并复制内容
Selection.WholeStory
Selection.Copy
有人知道如何将这两行代码转换为等价的C#代码吗?我不确定在我的情况下运行外部宏是否理想,因为一些将使用包括将数据临时复制到剪贴板的整个工具链的用户将不被允许运行Office宏-公司政策。
使用C#,我尝试了以下操作。我正在做的是打开一个.docx文件,选择正文内容并尝试将其复制到Windows剪贴板。我无法让它工作。
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
namespace copy_docx_clipboard
{
using System.Windows.Forms;
internal class Program
{
[STAThread]
private static void Main(string[] args)
{
string fileName = @"C:outtable_42.docx";
using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(fileName, false))
{
Body body = wordDocument.MainDocumentPart.Document.Body;
Clipboard.Clear();
Clipboard.SetDataObject(body, true, 5, 200);
Console.WriteLine("done");
Console.ReadKey();
}
}
}
}
我将内容复制到Windows剪贴板的原因是此工具链中的另一个工具将是接收器。我知道剪贴板的文本,但我无法使用它,因为将要复制的一些数据将是Word表格、图片、数字等,基本上它将是动态的。
任何见解、提示、指向文档都将不胜感激。
使用剪贴板.SetDataObject(body,true,5200);不会起作用。您可以使用设置剪贴板
Clipboard.SetText(body.InnerText, TextDataFormat.Unicode);
然而,这是InnerText,它只是文本,不包含任何格式。或者,您可以将主体作为XML文档,并使用Xpath查询遍历文档的元素,以获得您想要的详细信息,如KyleM在本文中所述。如何在C#中从MS office文档中提取文本