Можете ли вы получить docx xml из буфера обмена в С# (.NET 4.0)

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

Буфер обмена.GetText(TextDataFormat.Html); или Буфер обмена.GetImage(); или что у тебя.

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


person shane    schedule 07.01.2011    source источник
comment
нет - вы должны отправить его в буфер обмена, прежде чем сможете его получить. объектная модель в Word 2007/2010 позволяет получить Open XML (а дальше с ним можно делать все что угодно).   -  person Todd Main    schedule 18.03.2011
comment
Эй, ты все еще помнишь, нашел ли ты решение для этого?   -  person edi9999    schedule 11.02.2014
comment
Никогда не находил решения. Пришлось отказаться от этой функции. Оставил в перетаскивании файлы docx, потому что это сработало.   -  person shane    schedule 14.03.2014


Ответы (1)


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

Пока ты там, ты можешь

  1. управлять docx с помощью 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);

                 }
            }
        }
person Markus    schedule 12.07.2016