0

我正在 c# 中创建一个 excel 加载项。在加载项中,用户创建“查询”对象,然后执行查询并在 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. 有没有更好的方法来实现我想要做的事情?

谢谢

4

1 回答 1

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();
于 2011-04-04T06:16:09.137 回答