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

时间:2016-03-27 05:32:47

标签: c# .net office-interop

我正在将excel与外部服务集成,该服务涉及从该服务接收数据并在var currentTemp = 0; $.simpleWeather({ location: 'New York, New York', woeid: '', unit: 'f', success: function(weather) { currentTemp = weather.temp; $('#degrees').text(currentTemp); }, error: function(error) { currentTemp = 150; } }); 中显示。我希望能够存储我在excel对象中获得的信息。是否存在Excel.Range对象的任何属性,可以存储元数据?

为了澄清,与在Outlook中一样,Excel.Range具有ItemProperties,它是Outlook.TaskItem对象。那么在Outlook.ItemProperty中有类似的东西吗?

如果没有,那么为Excel存储元数据的最佳方法是什么?

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

2 个答案:

答案 0 :(得分:0)

即使我正在开发自己的自定义Range Metadata类,我也不确定是否有这样的属性。通过这种方式,您可以灵活地做任何您需要或稍后需要的事情。

以下是开始示例,了解如何执行此操作:

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(...);
    }
}

由于您正在使用interops,因此需要注意释放COM对象。为此,您可以依赖其他帖子,查看我的回答there

答案 1 :(得分:0)

由于您需要持久的信息,我使用的是更简单,更清晰的方法。 创建一个新的工作表,称之为[YourSheetName]元数据(如果您有多个这种类型)。将它设置为VeryHidden(xlSheetVeryHiddencan&#39h从Excel中取消隐藏,你必须从代码中取消隐藏它):

xl.XlSheetVisibility.xlSheetVeryHidden

在范围R1中的元数据表中保存范围R1的所有元数据。 您的代码将以这种方式非常简单明了。

它可能看起来像:

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