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

Gus*_*ahm 11 .net c# excel vsto

我正在使用VSTO创建Excel加载项.此附加组件从sql-server检索并显示大量数据.这很好用,但后来我打算访问excel中的一些数据并以某种方式修改它.我的问题是我需要一种对我想要修改的单元格进行分类的方法.有没有办法将元数据添加到单元格中以了解它是否是应该修改的单元格?例如,向单元格添加一个属性,例如"editable_cell",并执行类似Excel.FindCellsWithAttribute("editable_cell")的操作来查找被搜索的单元格?

谢谢!

AMi*_*ico 9

有几种方法可以做到这一点.我不知道您的具体要求,因此我将简要介绍一些解决方案.

  • 创建命名范围,但如果不正确,添加/删除数据可能会影响定义的命名范围.有时,最好将名为range的单个单元格定义为书签,然后"select range"将为您提供所有数据.

  • 创建一个样式.将此样式应用于您要"查找"的每个数据单元格.定义一个返回Range基础的方法,单元格具有指定的样式.

  • 创建一个PivotCache对象.此对象具有更新自身的能力,并减小文件大小,尤其是在工作簿中重复使用缓存时.它也是解决工作表中行数限制的一种方法.

  • 创建一个列表.这有许多优点.您可以随意添加/删除数据.添加/删除列.将列表视为表格.

  • 使用XML Mapping(http://msdn.microsoft.com/en-us/library/aa203737 ( office.11​​) .aspx)作为"code4life"提及.

  • 如果工作簿是XMLSS,则定义新的命名空间并使用命名空间中的属性装饰单元格.然后,您可以使用XPath"查询".这是一个非常强大的功能,因为您可以将所需的任何内容嵌入到工作簿中.

每个都有其优点/缺点.我多次使用过每个解决方案.


Ism*_*ani 5

AMissico 列出了一些非常好的解决方案。我想添加一个对我有用的:

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

var app = (Application) ExcelDnaUtil.Application;
app.ActiveCell.AddComment("This is an editable cell");
Run Code Online (Sandbox Code Playgroud)

明显的缺点是用户可以看到此评论 - 就我而言,它效果很好,因为我可以为用户提供有用的诊断,并且还可以解析相同的文本以获得我想要的元数据。

您还可以使用以下方法隐藏评论:

app.DisplayCommentIndicator = XlCommentDisplayMode.xlNoIndicator;
Run Code Online (Sandbox Code Playgroud)

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

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


Jim*_*m L 0

我不记得有什么方法可以完全按照您的要求进行操作。我过去看到的做法是根据您可能想要查找的内容设置范围名称。另一种选择是隐藏旁边的单元格或某些其他预定的偏移量(例如,始终向右 3 个单元格,或相同位置但位于隐藏页面上)。隐藏的单元格/页面将包含您要查找的数据。

在我曾经工作过的会计师事务所中,似乎意外出现的最佳实践是,您应该将所有数据推送到隐藏的“丑陋”页面中,并使用公式/查找来引用您的数据。这样,您就可以更新“丑陋”页面并知道数据在哪里,同时拥有一个“漂亮页面”,用户可以根据自己的喜好进行调整。