VSTO:将元数据附加到Excel中的单元格?

我正在使用VSTO创buildExcel加载项。 这个插件检索并显示来自sql-server的大量数据。 这很好,但后来我打算访问Excel中的一些数据,并在某些方面进行修改。 我的问题是,我需要一种分类我想修改的单元格的方法。 有没有什么办法可以将元数据添加到单元格中,以了解它是否应该修改的单元格? 例如,添加一个属性到单元格,例如“editable_cell”,并做一些像Excel.FindCellsWithAttribute(“editable_cell”)来寻找所需的单元格?

谢谢! /古斯塔夫

有几种方法可以做到这一点。 我不知道你的具体要求,所以我将简要地概述一些解决scheme。

  • 创build一个命名范围,但是如果你没有做到这一点,添加/删除数据会影响定义的命名范围。 有时,最好定义一个名为范围的单元格作为书签,然后“select范围”将获得所有数据。

  • 创build一个样式。 将这种样式应用于您希望“查找”的每个数据单元。 定义一个方法,返回单元格具有指定样式的Range基础。

  • 创build一个PivotCache对象。 此对象有能力自行更新,并减less文件大小,特别是在工作簿中重复使用高速caching时。 这也是解决工作表中行数限制的一种方法。

  • 创build一个列表。 这有很多优点。 您可以随意添加/删除数据。 添加/删除列。 把一个列表看作一个表格。

  • 作为“code4life”提到使用XML映射( http://msdn.microsoft.com/en-us/library/aa203737(office.11​​).aspx )。

  • 如果工作簿是XMLSS,则定义一个新的名称空间,并使用名称空间中的属性装饰单元格。 然后您可以使用XPath“查询”。 这是非常强大的,因为您可以将任何需要的内容embedded到工作簿中。

各有其优点/缺点。 我已经多次使用每个解决scheme。

AMissico列出了一些非常好的解决scheme。 我想添加一个为我工作的:

在C#(ExcelDNA / VSTO)或VBA中,您可以执行如下操作:

 var app = (Application) ExcelDnaUtil.Application; app.ActiveCell.AddComment("This is an editable cell"); 

明显的缺点是用户可以看到这个评论 – 在我的情况下,它的工作得很好,因为我可以提供有用的诊断给用户,也parsing相同的文本,以获得我想要的元数据。

您也可以使用以下方式隐藏评论:

 app.DisplayCommentIndicator = XlCommentDisplayMode.xlNoIndicator; 

但是请注意,这隐藏了所有评论,而不仅仅是您添加的评论。 要遍历工作表中的注释,可以使用以下命令:

 var comments = ((Worksheet)app.ActiveSheet).Comments; foreach(Comment comment in comments) { var text = comment.Text(); // do something... } 

我不记得一个办法来做你正在问的东西。 过去我所看到的是根据你想查找的内容来设定范围名称。 另一个select是隐藏它旁边的单元格或其他预定的偏移量(例如,总是向右3个单元格,或相同的位置,但在隐藏的页面上)。 隐藏的单元格/页面将包含您要查找的数据。

有一件事似乎曾经在我过去曾经工作过的会计师事务所中偶然出现过,那就是你应该把所有的数据放到一个隐藏的“丑陋”的页面中,并使用公式/查找来引用你的数据。 这样,你可以更新“丑陋”的页面,并知道数据的位置,同时拥有一个“漂亮的页面”,用户可以把他们的心灵的内容。

你可能想看看XML映射: http : //msdn.microsoft.com/en-us/library/aa203737(office.11​​).aspx

您可以在CustomXMLPart内的工作簿级别embedded元数据。 customXMLpart可以存储一个序列化的字典。 字典可以将单元格地址存储为键,并将相应的元数据存储为值。

添加一个自定义的XML部分: http : //msdn.microsoft.com/en-us/library/bb608612.aspx

请注意,这只适用于xls和xlsx文件格式。