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