2013-12-19 3 views
2

Я пытаюсь создать надстройку в C# для MS Word 2010, которая добавит новую ленту и обработчик события щелчка. Например, этот обработчик события click должен сохранять активный файл в c:\temp. И тогда мне нужно загрузить содержимое файла в массив байтов.Программно сохранить открытый документ в надстройке MS Word

Вероятно, что-то вроде этого:

public void ClickEventHandler(Office.IRibbonControl control) 
{ 
    string fileLocation = "c:\temp\test.docx"; 
    Word.Document document = this.Document; 
    document.SaveAs(fileLocation); 
    byte[] byteArray = File.ReadAllBytes(fileLocation); 
} 

Дело в том, что это псевдо-код, и я не знаю, как загрузить активный документ в массив байтов. Если есть способ без сохранения документа, это будет еще лучше.

И если активным файлом является файл docx (а не файл doc), было бы неплохо.

+0

Что именно вы пытаетесь выполнить, между прочим? Добро пожаловать в StackOverlow! :) –

+0

Ну, спасибо. Я новичок в программировании, и я просто тестирую. Я пытаюсь преобразовать документ docx в файл xhtml, и я использую эту статью: http://msdn.microsoft.com/en-us/library/ff628051%28v=office.14%29.aspx, и хорошо, это но я хотел бы реализовать эту функцию в надстройке word 2010. проблема в том, что я не могу преобразовать документ, который в настоящее время открыт словом. – user3120053

+0

Я не уверен, что то, что вы хотите сделать, возможно. См. Мой обновленный ответ. –

ответ

0

Я использую эту обобщенную функцию в моей программе сериализовать произвольные объекты в массив байтов:

private byte[] MakeByteSize<U>(U obj) 
{ 
    if (obj == null) return null; 

    var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
    var ms = new System.IO.MemoryStream(); 
    bf.Serialize(ms, obj); 

    return ms.ToArray(); 
} 

Edit:

После прочтения вашего дополнительного контента, я уверен, что сериализации Word.Document объект не получит вам то, что вам нужно, поскольку массив байтов, представляющий этот объект в программе (который, вероятно, является оберткой вокруг некоторого COM-взаимодействия), не будет таким же, как массив байтов, представляющий информацию, хранящуюся в файле о документ.

Рассматривая MSDN article, на который вы ссылаетесь, похоже, что нам действительно нужен экземпляр WordprocessingDoc, представляющий документ, который мы можем передать классу HtmlConverter. Поэтому я думаю, что вопрос, который вы действительно хотите задать, - «Как я могу создать DocumentFormat.OpenXml.Packaging.WordprocessingDocument из открытого документа без сохранения файла в первую очередь?»

К сожалению, я не уверен, что это возможно, так как я на самом деле не вижу methods на этом class, который сделает это.

На .doc против .docx вопроса, Open XML SDK for Microsoft Office говорит, что он работает с documentat, которые прилипают к «Office Open XML форматы файлов Specification», который я считаю означает, что он будет работать только с форматом файла .docx. Возможно, вам придется попробовать другой маршрут, например, экспортировать в PDF. Удачи!

2
Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;  
document.SaveAs2(goldenpath + "\\" + name + "." + id + ".docx"); 
document.Close(); 
+0

, если вы работаете с пользовательским элементом управления. !!! –