我正在将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对象(或任何其他属性)中提取此元数据
答案 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;