在Excel工作表中保存CustomProperty

时间:2016-09-28 08:18:29

标签: c# .net excel excel-vba excel-addins vba

我们在C#中有Excel加载项。要支持我们使用Worksheet.CustomProperties的某些功能。我们发现在添加一些自定义属性后,我们正在更改其值。例如,我们通过Add方法设置“1”。在某些时候,我们将相同的值更改为“2”。然后我们保存工作簿并再次打开它。出于某种原因,我们看到“1”而不是“2”。为什么?它看起来我错过了什么,但不知道是什么。 更新:

    public class CustomPropertyUtil
{
    protected readonly Worksheet Sheet;

    public WorkSheetCustomPropertyUtil(Worksheet sheet)
    {
        this.Sheet = sheet;
    }

    protected bool Exists(string propertyName)
    {
        try
        {
            return Sheet.CustomProperties.Cast<CustomProperty>().Any(c => c.Name == propertyName);
        }
        catch (System.Runtime.InteropServices.COMException)
        {
            return false;
        }
    }

    protected object GetValue(string propertyName)
    {
        CustomProperty property = GetProperty(propertyName);
        return property != null ? property.Value : null;
    }

    protected void SetValue(string propertyName, object value)
    {
        CustomProperty customProperty = GetProperty(propertyName);

        if (customProperty == null)
        {
            AddCustomProperty(propertyName, value);
        }
        else
        {
            customProperty.Value = value;
        }

    }

    private void AddCustomProperty(string propertyName, object value)
    {
        Sheet.CustomProperties.Add(propertyName, value);
    }

    protected CustomProperty GetProperty(string propertyName)
    {
        return Exists(propertyName)
            ? Sheet.CustomProperties.Cast<CustomProperty>().FirstOrDefault(c => c.Name == propertyName)
            : null;
    }
}

这是我们管理自定义属性的方式。当我们保存时,我们会做以下事情:

Workbook.SaveAs(filePath, AccessMode: XlSaveAsAccessMode.xlNoChange);

当我在VBA中打开它时,我看到我的CustomProperties没有保存。

1 个答案:

答案 0 :(得分:0)

也许我已经过度简化了您的任务,但我设置了自定义属性(例如,将文件保存到Sharepoint文档库时的属性),如下所示:

Excel.Workbook wb;

wb.ContentTypeProperties["Region"].Value = "Northeast";

可能这些属性与您正在讨论的属性不同...这将更改属性,例如,当您单击&#34;文件&#34;选项卡并查看&#34;属性&#34;在最右边的面板中列出。