将元数据存储在 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;
我正在将 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;