2013-12-19 52 views
2

我試圖在C#中爲MS Word 2010創建一個加載項,該插件將添加一個新的功能區和一個單擊事件處理程序。例如,此單擊事件處理程序應將活動文件保存在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以及它,它是工作,但我想在一個字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(); 
} 

編輯:

閱讀您的附加內容後,我相信,串行化Word.Document對象不會得到你所需要的,因爲在程序中表示該對象的字節數組(可能是一些COM互操作的封裝)將不會與表示存儲在文件中的信息的字節數組相同文件。

看你引用的MSDN article,它看起來像我們真正需要的是代表我們可以傳遞給HtmlConverter類的文檔的一個WordprocessingDoc實例。所以我認爲你真正想問的問題是「如何在不保存文件的情況下從打開的文檔創建DocumentFormat.OpenXml.Packaging.WordprocessingDocument?」

不幸的是,我不確定這是可能的,因爲我沒有真正發現class上的任何methods這樣做。

.doc VS .docx問題,Open XML SDK for Microsoft Office說,它的工作原理與documentat是堅持「的Office Open XML文件格式規範」,我相信意味着它將只與.docx文件格式工作。您可能需要嘗試不同的路線,例如導出爲PDF。祝你好運!

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

如果您正在使用用戶控件。 –

相關問題