将元数据存储在 Excel.Range 对象中

Storing meta data in an Excel.Range object

我正在将 excel 与外部服务集成,该服务涉及从该服务接收数据并显示在 excel 中。我希望能够将我获得的信息存储在 Excel.Range 对象中。是否有 属性 的 Excel.Range 对象可以存储元数据?

澄清一下,就像在 Outlook 中一样,Outlook.TaskItem 具有 ItemProperties,它是一个 Outlook.ItemProperty 对象。那么在Excel中有类似的东西吗?

如果不是,那么存储 Excel.Range 元数据的最佳方式是什么?

编辑: 我需要保留这个元数据信息。因此,如果用户保存、关闭然后重新打开工作簿,我需要能够从 Excel.Range 对象(或任何其他 属性)

中提取此元数据

我不确定是否有这样的 属性 即使,我正在开发自己的自定义范围元数据 class。这样,您就可以灵活地做任何您需要或以后可能需要的事情。

以下是一个开始如何操作的示例:

class RangeListMetaData
{
    private readonly List<RangeMetaData> _rangeList;

    public RangeListMetaData()
    {
        _rangeList = new List<RangeMetaData>();
    }

    public void Add (RangeMetaData rangeMetaData)
    {
        _rangeList.Add(rangeMetaData);
    }
}


class RangeMetaData
{
    public RangeMetaData(xl.Range range)
    {
        this.Range = range;
    }

    public RangeMetaData(xl.Range range, object value) : this(range)
    {
        this.RangeValue = value;
    }

    public xl.Range Range { get; private set; }

    public object RangeValue { get; set; }
}

class TestRangeMetaData
{
    void Test()
    {
        var rangeListMetaData = new RangeListMetaData();

        // storing part
        RangeMetaData range = new RangeMetaData([Your excel Cells], [You Value]);
        rangeListMetaData.Add(range);

        // Retrieve Part
        rangeListMetaData.FindByRange(...);
        rangeListMetaData.FindByValue(...);
        rangeListMetaData.FindBySomethingElse(...);
    }
}

由于您使用的是互操作,因此需要注意释放 COM 对象。为此,你可以依靠另一个post,看我的回答

由于您需要持久保存信息,因此我使用了一种更简单、更清晰的方法。 创建一个新的 WorkSheet,将其命名为 [YourSheetName]Metadata(如果您有多个此类)。将其设置为 VeryHidden(xlSheetVeryHidden 无法通过 Excel 取消隐藏,您必须从代码中取消隐藏它):

xl.XlSheetVisibility.xlSheetVeryHidden

将范围 R1 的所有元数据保存在范围 R1 的元数据 sheet 中。 这样你的代码就会非常简单明了。

它可能看起来像:

Sheet1.Range[row,col].Value = SomeValue;
Sheet1Metadata.Range[row,col].Value = MetaDataOfSomeValue;