原創文章轉載請注明出處:@協思, 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