Можете ли вы получить DOCX XML из буфера обмена в C # (.NET 4.0) - PullRequest
2 голосов
/ 07 января 2011

Легко получить такие вещи, как Html, rtf, UnicodeText и изображения из буфера обмена, используя это:

Clipboard.GetText (TextDataFormat.Html);или Clipboard.GetImage ();или что у вас.

Есть ли способ извлечь docx xml из буфера обмена (тот, который вы получите, если посмотрите на сохраненный файл docx)?Помещает ли копирование / вырезка в текстовом документе документ docx xml в буфер обмена?

1 Ответ

1 голос
/ 12 июля 2016

Вы должны обойти эту проблему, захватывая имя файла Word docx и затем читая его, чтобы получить XML за ним, а затем вставляя его в буфер обмена.

Пока вы там, вы можете

  1. манипулировать документами с помощью http://docx.codeplex.com/
  2. поместить HTML в буфер обмена http://cathalscorner.blogspot.ca/2009/10/converting-docx-into-doc-pdf-html.html
  3. Получить часть XML документа - https://msdn.microsoft.com/en-us/library/aa982683(v=office.12).aspx
  4. Какполучить обычный текстовый документ Word с использованием Open XML (CSOpenXmlGetPlainText) - https://code.msdn.microsoft.com/office/CSOpenXmlGetPlainText-554918c3

.

    public static string ToStringWithDeclaration(this XDocument doc)
    {
        if (doc == null)
        {
            throw new ArgumentNullException("doc");
        }
        StringBuilder builder = new StringBuilder();
        using (TextWriter writer = new StringWriter(builder))
        {
            doc.Save(writer);
        }
        return builder.ToString();
    }

    public static void SetFileDropList(StringCollection filePaths) {

        IDataObject data = Clipboard.GetDataObject();
        if (!data.GetDataPresent(DataFormats.FileDrop))
        return;

        string[] filePaths = (string[])data.GetData(DataFormats.FileDrop);
        foreach (string fileLoc in filePaths) {

            if (Path.GetExtension(fileLoc)==".docx"){

                  if (File.Exists(c)) {

                        Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
                        Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
                        XDocument xDoc = XDocument.Load(fileLoc);

                       Clipboard.SetText(xDoc.ToStringWithDeclaration(), TextDataFormat.Html);

                 }
            }
        }
...