如何将c#对象附加到excel工作表,并在保存工作簿时将其保存

如何将c#对象附加到excel工作表,并在保存工作簿时将其保存,c#,.net,excel-interop,excel-addins,C#,.net,Excel Interop,Excel Addins,我正在用c#创建一个excel加载项。在外接程序中,用户创建“查询”对象,然后执行查询并在excel中显示数据。 我希望保存“query”对象,并能够在给定工作表的情况下获取该对象,以便对其进行编辑并重新执行查询 我发现了以下可能性: public static void SetDocumentProperty(string propertyName, String str) { DeleteDocumentProperty(propertyName);

我正在用c#创建一个excel加载项。在外接程序中,用户创建“查询”对象,然后执行查询并在excel中显示数据。 我希望保存“query”对象,并能够在给定工作表的情况下获取该对象,以便对其进行编辑并重新执行查询

我发现了以下可能性:

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);
        }
将查询保存为字符串(序列化对象后)。 我仍然需要一种方法将查询连接到工作表,我已经尝试使用工作表名称-问题是工作表名称可能会更改。所以我的问题是:

  • 有没有办法得到一个独一无二的 工作表的标识符
  • 有没有更好的方法来实现我的目标
  • 谢谢

    我最后用了这个:

    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”
    )获取:


    您知道Workplace.CustomProperties和Workbook.CustomDocumentProperties之间的区别吗?
    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();