2011-03-15 57 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

相关问题