原創文章轉載請注明出處:@協思, http://zeeman.cnblogs.com
得益於微軟系強大的共通能力和Visual Studio的開發支持,做Office插件不是什麼難事。一點經驗記錄如下:
1. 如果要同時開發Word和Outlook插件,那麼可將復用的代碼封閉到獨立的Library中。
2. 在可安裝.NET Framework 4的系統上,可以嵌入WPF組件。
3. 由於Office的安全模型,安裝部署裡需要可信任證書的簽名。
4. 初始化代碼可在ThisAddIn添加,如Startup、Shutdown、Application.NewMailEx...
代碼集錦
1. 獲取文件名:
app = Globals.ThisAddIn.Application; Path.GetExtension(app.ActiveDocument.FullName)
2.檢查文檔是否保存:
app = Globals.ThisAddIn.Application; if (!app.ActiveDocument.Saved) { if (MessageBox.Show("This command publish the disk version of a file to the server. Do you want to save your changes to disk before proceeding?", "warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { try { app.ActiveDocument.Save(); MessageBox.Show("save succeeded", "information", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show("saved failed." + ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } }
3. 獲取文檔內容,並添加自己的信息
public byte[] GetDocumentContent(Word.Document wordDoc, string headerText, string footerText) { //使用Mail.RTFBody獲取文檔內容會丟失部分格式,所以這裡還是采用剪貼板方式。 //復制文檔內容到剪貼板 wordDoc.Content.Copy(); using (RichTextBox rtb = new RichTextBox()) { //添加頭部信息 rtb.AppendText(headerText); rtb.SelectAll(); rtb.SelectionFont = new Font("Courier New", 11); rtb.SelectionColor = Color.Green; //添加正文 rtb.Select(rtb.TextLength, 0); rtb.Paste(); Clipboard.Clear(); //添加尾部信息 rtb.SelectionFont = new Font("Courier New", 11); rtb.SelectionColor = Color.Green; rtb.AppendText(footerText); using (System.IO.MemoryStream stream = new MemoryStream()) { rtb.SaveFile(stream, RichTextBoxStreamType.RichText); return stream.ToArray(); } } }
4. outlook郵件正文轉換為word文檔:
object selObject = currentExplorer.Selection[1]; MailItem mail = selObject as MailItem; if (mail == null) { MessageBox.Show("non-mail item not supported.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } Word.Document wordDoc = (Word.Document)mail.GetInspector.WordEditor;
資源下載
Office Control Identifiers: http://www.microsoft.com/en-us/download/details.aspx?id=6627
Office Document Extractor: http://code.msdn.microsoft.com/office/CSOfficeDocumentFileExtract-e5afce86
關於Office 2010 文件驗證的相關知識
Office 安全團隊負責測試 Office 文件驗證(代碼名稱:網關守衛)。人們對 Microsoft Office 2010 的新文件驗證功能存在一些誤解,在此我希望消除這些誤解,同時說明原因及具體操作。
一、什麼是Office 2010 文件驗證?
Office文件驗證是一種防范功能。主要是檢查應用程序即解析文件的具體位數,如果確定是有效文件則會按正常方式打開,如果發現文件無效則會發送到(默認情況)受保護的視圖。
二、什麼是網關守衛?
Office 文件驗證是一種功能,該功能最初是在 Publisher 2007 中引入的,用來驗證 Publisher 的PUB 文件。它可驗證特定二進制文件是否符合應用程序的要求。在 Office 2010 中有效擴展了該功能,以包含 Word、Excel 和 PowerPoint 的二進制格式。請注意,該功能僅適用於二進制格式(即PUB、DOC、XLS、PPT 等),而不能驗證基於 XML 的文檔(即 DOCX、XLSX、PPT等),也不能驗證宏或其他自定義項目。它可驗證的對象是文件結構。
三、為什麼要進行驗證?
一直以來,Office 二進制格式的標准不斷演化,復雜性不斷增加。對於這些格式復雜的原因,在其他地方已詳細討論過(請參閱2、3樓的 Joel Spolsky 的文章),因此在此不作探討,但此處完好記錄了這些二進制格式。惡意攻擊者將二進制文件用作攻擊手段來感染目標用戶,因此我們希望找到一種阻止此問題發生的方法。網關守衛采取的一項措施是:當 Microsoft 收到一個新的 Office 文件格式攻擊的報告時,就會通過驗證進行檢查,以了解這項措施的效果。到目前為止,效果相當不錯!
四、如何控制該驗證?
1、通過策略
利用組策略來控制文件驗證失敗時的默認操作。這些策略位於組策略模板中應用程序的“選項”\“安全性”\“信任中心”\“受保護的視圖”下,它視應用程序設置而定。
2、通過注冊表
有以下幾個用來控制 Office 文件驗證的各個方面的注冊表項。
常用注冊表項
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation \ReportingInterval - 這是一個 DWORD,它可控制顯示將文件發送到 Windows 錯誤報告的對話框的間隔天數。
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation\DisableReporting - 這是一個 DWORD,如果設置為 1,則禁止顯示對話框(因此禁止向 Windows 錯誤報告發送文件)。
應用程序特定注冊表項
適用於我將使用“Excel”的這些示例,但對“PowerPoint”和“Word”同樣有效
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\EnableOnLoad – 這是一個 DWORD,如果設置為 0,則 Office 不會驗證......余下全文>>
你這個東西今後的使用人群都是用什麼版本的?以他們的需求為主
2007是大趨勢,但是現在不夠普及,操作習慣需要改變太多了,03是很普及,但功能顯然不如07強大,後勁也不如07