[英]How can I get back a previously created Excel ListObject?
我正在使用VSTO在Excel中创建ListObject,如下所示:
ListObject lo = ws_vsto.Controls.AddListObject(range, "MyList");
(范围变量是先前定义的范围。)
如果然后遍历工作表控件集合,则可以找到该ListObject。
但是,如果我保存工作簿并重新打开它,则控件集合为空。 重新打开后如何重新获得此ListObject,以便我可以继续使用它?
编辑
我还有一点:
var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
var wb_vsto = wb.GetVstoObject();
foreach (Excel.Worksheet ws in wb.Worksheets)
{
var wsv = ws.GetVstoObject();
foreach (Excel.ListObject l in ws.ListObjects)
{
MessageBox.Show(l.Name);
var lo = wsv.Controls.AddListObject(l);
Excel.Range range = lo.Range;
range.Activate();
}
}
当我到达var lo =行时,我有一个ListObject添加到Controls集合中并且可以使用。 但是,它的DataSource属性为null。 是否有一种简单的方法来取回原始数据源?
然后,我考虑根据范围内的信息重建数据源。 range.Activate()行选择Excel中的列表(所以我知道它有正确的选择)。 但是,我无法终生解决如何使数据超出该范围并获取该范围的地址。 MSDN文档讨论了Address属性,但这似乎并不存在。 (有关VSTO的MSDN文档充其量似乎充其量)。
我对初始代码进行了以下更改。 您需要从工厂取回VSTO Listobject。
var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
var wb_vsto = wb.GetVstoObject();
foreach (Excel.Worksheet ws in wb.Worksheets)
{
var wsv = ws.GetVstoObject();
foreach (Excel.ListObject l in ws.ListObjects)
{
MessageBox.Show(l.Name);
//var lo = wsv.Controls.AddListObject(l);
Microsoft.Office.Tools.Excel.ListObject lo =
Globals.Factory.GetVstoObject(l);
// I can now get at the datasource if neede
var ds = lo.DataSource;
// In my case the datasource was DataTable.
DataTable t = (DataTable)d;
if (t.Rows.Count > 0)
{
foreach (DataRow r in t.Rows)
{
// Access row data.
}
}
//Excel.Range range = lo.Range;
//range.Activate();
}
}
你有没有尝试过? Microsoft.Office.Tools.Excel.ListObject lo = Microsoft.Office.Tools.Excel.ListObject.GetVstoObject(l)(它是C#,我不确定在VB中)
从MSDN GetVstoObject中 ,请务必阅读这些说明。
关于第一个问题,您使用代码创建了listOject
ListObject lo = ws_vsto.Controls.AddListObject(range, "MyList");
要在保存/删除工作簿后恢复对象,请尝试以下代码:
ListObject lo = Globals.Factory.GetVstoObject(Worksheet.ListObjects["MyList"]);
您根本无法获取在运行时动态创建的ListObject控件。 这来自MSDN文档 。
默认情况下,关闭工作表时,动态创建的列表对象不会作为宿主控件保留在工作表中。
我可以获取ListObject的唯一方法是在设计时直接在模板的工作表中创建它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.