如何在Excel工作簿中存储信息

如何在Excel工作簿中存储信息,excel,persistence,vsto,add-in,Excel,Persistence,Vsto,Add In,我正在用VS2008和VSTO(C#)编写一个Excel加载项,而不是Office2007。 此加载项需要存储工作簿中嵌入的或内部的信息,以便在用户使用此类信息再次打开工作簿时恢复某些状态。在保存工作簿之前,加载项将以XML序列化所有信息,在打开工作簿之后,如果找到该信息,加载项将尝试反序列化该信息 我试图使用Office.DocumentProperties,但每个字符串元素都被截断(最多256个字符) 在事件Excel.AppEvents\u WorkbookOpenEventHandler

我正在用VS2008和VSTO(C#)编写一个Excel加载项,而不是Office2007。 此加载项需要存储工作簿中嵌入的或内部的信息,以便在用户使用此类信息再次打开工作簿时恢复某些状态。在保存工作簿之前,加载项将以XML序列化所有信息,在打开工作簿之后,如果找到该信息,加载项将尝试反序列化该信息

我试图使用Office.DocumentProperties,但每个字符串元素都被截断(最多256个字符)

在事件Excel.AppEvents\u WorkbookOpenEventHandler和Excel.AppEvents\u WorkbookBeforeCloseEventHandler中:

在事件发生时\u WorkbookOpenEventHandler:

但这不起作用,因为序列化返回的字符串长度超过256个字符

在另一个加载项中,在Excel2003上,我将信息存储在“veryhidden”表的第一个单元格中,并使用一个奇怪的名称。我不知道是否有更好的解决办法。

好的,我找到了“好方法”。Office.CustomXMLParts是存储XML数据的集合

您可以直接在Msdn上找到信息

MSDN示例:

private void AddCustomXmlPartToWorkbook(Excel.Workbook workbook){
string xmlString =
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    "<employees xmlns=\"http://schemas.microsoft.com/vsto/samples\">" +
        "<employee>" +
            "<name>Karina Leal</name>" +
            "<hireDate>1999-04-01</hireDate>" +
            "<title>Manager</title>" +
        "</employee>" +
    "</employees>";
Office.CustomXMLPart employeeXMLPart = workbook.CustomXMLParts.Add(xmlString, missing);
}
private void AddCustomXmlPartToWorkbook(Excel.Workbook工作簿){
字符串xmlString=
"" +
"" +
"" +
“卡丽娜·莱尔”+
"1999-04-01" +
“经理”+
"" +
"";
Office.CustomXMLPart employeeXMLPart=workbook.CustomXMLParts.Add(xmlString,缺失);
}

o K,但如何取回该零件?
Office.DocumentProperties properties = (Office.DocumentProperties)Application.ActiveWorkbook.CustomDocumentProperties;
Configuration configurationInstance = deserialize((string)properties[Constants.ADDIN_PERSISTENCE]);
private void AddCustomXmlPartToWorkbook(Excel.Workbook workbook){
string xmlString =
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    "<employees xmlns=\"http://schemas.microsoft.com/vsto/samples\">" +
        "<employee>" +
            "<name>Karina Leal</name>" +
            "<hireDate>1999-04-01</hireDate>" +
            "<title>Manager</title>" +
        "</employee>" +
    "</employees>";
Office.CustomXMLPart employeeXMLPart = workbook.CustomXMLParts.Add(xmlString, missing);
}