我正在尝试在C#中为MS Word 2010创建一个加载项,它将添加一个新的功能区和一个单击事件处理程序。例如,此单击事件处理程序应将活动文件保存在c:\temp
中。然后我需要将文件内容加载到字节数组中。
可能是这样的:
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 :(得分:2)
Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;
document.SaveAs2(goldenpath + "\\" + name + "." + id + ".docx");
document.Close();
答案 1 :(得分: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的包装) interop)与表示文件中存储的有关文档的信息的字节数组不同。
查看您引用的MSDN article,看起来我们真正需要的是一个WordprocessingDoc
实例,表示我们可以传递给HtmlConverter
类的文档。所以我认为你真正想问的问题是“如何在不保存文件的情况下从打开的文档中创建DocumentFormat.OpenXml.Packaging.WordprocessingDocument
?”
不幸的是,我不确定这是可能的,因为我并没有真正发现methods上class的任何Open XML SDK for Microsoft Office。
在.doc
vs .docx
问题上,{{3}}表示它适用于符合“Office Open XML文件格式规范”的documentat,我相信这意味着它只会起作用使用.docx
文件格式。您可能必须尝试不同的路线,例如可能导出为PDF。祝你好运!