2011-03-15 79 views
0

我在c#中創建了一個excel加載項。在插件中,用戶創建'查詢'對象,然後執行查詢並在Excel中顯示數據。 我想保存'查詢'對象,並能夠獲取它提供一個工作表來啓用編輯和重新執行查詢。如何將c#對象附加到excel工作表並在工作簿保存時保存它

我發現以下可能性:

public static void SetDocumentProperty(string propertyName, String str) 
     { 
      DeleteDocumentProperty(propertyName); 
      var workbook = Globals.ThisAddIn.GetActiveWorkBook(); 
      workbook.CustomDocumentProperties.Add(propertyName, false, Microsoft.Office.Core.MsoDocProperties.msoPropertyTypeString, str); 
     } 

這節省了將查詢作爲字符串(序列化對象之後)。 我仍然需要一種方法將查詢連接到工作表,我嘗試過使用工作表名稱 - 與此相關的麻煩是工作表名稱可能會更改。所以我的問題是:

  1. 有什麼辦法獲得工作表的唯一 標識符?
  2. 有沒有更好的方式來實現我想要做的事情?

感謝

回答

2

我結束了使用此:

public static void SetWorkSheetQuery(Microsoft.Office.Interop.Excel.Worksheet ws, EntityQuery q) 
{ 
        var cp = GetCustomProperty(ws,"query"); 
        if (cp == null) 
         ws.CustomProperties.Add("query", q.ToJson()); 
        else cp.Value = q.ToJson(); 
} 

這種序列化之後附着對象到工作表的自定義屬性。 它可以在以後使用(該屬性是"query"的名稱)中獲取:

private static CustomProperty GetCustomProperty(Worksheet ws, String name) 
     { 
      for (int i = 1; i <= ws.CustomProperties.Count; i++) 
      { 
       if (ws.CustomProperties.get_Item(i).Name == name) 
        return ws.CustomProperties.get_Item(i); 
      } 

      return null; 
     } 

它可以通過使用被刪除:

var cp = GetCustomProperty(ws, "query"); 
      if (cp != null) 
       cp.Delete(); 
+0

你知道Worksheet.CustomProperties和工作簿之間的差別。 CustomDocumentProperties? – gap 2012-09-06 18:41:02

相關問題