将Docx复制到剪贴板C#

时间:2015-12-07 02:32:19

标签: c# macros clipboard docx

在过去的两个小时里,我搜索了这个很棒的网站,但无法找到解决类似帖子的解决方案。

我正在使用第三方工具创建动态.docx文件。

我需要做什么:

  1. 打开每个文件
  2. 选择所有内容
  3. 将内容复制到Windows剪贴板
  4. 创建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:\out\table_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表格,图片,数字,excetra-基本上它将是动态的。

    任何见解,提示,指向文档都会很有意义。

1 个答案:

答案 0 :(得分:0)

使用Clipboard.SetDataObject(body,true,5,200);不管用。您可以使用

设置剪贴板
  Clipboard.SetText(body.InnerText, TextDataFormat.Unicode);

但是,这是InnerText,它只是文本,并且不包含格式。您也可以将body作为XML文档,并使用Xpath查询遍历文档的元素,以获取KyleM在本文中所描述的详细信息。 How to extract text from MS office documents in C#