【发布时间】:2011-12-22 13:30:12
【问题描述】:
实际上,我可以使用以下代码轻松读取 VSTO 中 ListObject 的内容。
在此示例中,我正在读取给定工作表中的所有产品。使用 Excel 表编辑数据,该表转换为 VSTO 内的 ListObject。我将 VS2010 与 .NET 4.0 以及 Excel 2010 一起使用。
private IEnumerable<Produto> ReadFromWorksheet()
{
var produtosLidos = new List<Produto>();
try
{
foreach (Excel.ListRow row in Globals.Sheet1.tblProdutos.ListRows)
{
var id = RangeUtils.ToInt(row.Range[1, 1]) ?? -1;
var codigo = RangeUtils.ToString(row.Range[1, 2]);
var nome = RangeUtils.ToString(row.Range[1, 3]);
var qtdDisp = RangeUtils.ToDecimal(row.Range[1, 4]);
var unidMed = RangeUtils.ToString(row.Range[1, 5]);
var valor = RangeUtils.ToDecimal(row.Range[1, 6]);
if (string.IsNullOrEmpty(codigo) ||nome == null || qtdDisp == null || unidMed == null || valor == null)
throw new ApplicationException("Os campos Nome, Qtd. Disponível, Unid. de Medida e Valor são obrigatórios.");
var p = new Produto();
p.Id = id;
p.CodigoProduto = codigo;
p.Nome = nome;
p.QtdDisponivel = qtdDisp;
p.UnidadeMedida = unidMed;
p.Valor = valor;
p.DataUltimaAlteracao = DateTime.Now;
p.Acao = RangeUtils.ToString(row.Range[1, 8]);
p.Ativo = true;
produtosLidos.Add(p);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
return produtosLidos;
}
但有时用户想要添加另一行,甚至更改表格的列顺序。所以我想知道是否有更好的方法来通过列名而不是列索引来引用每一行。
一个可接受的解决方案是这样的:
var myValue = row.Range[1, "My Value"];
提前感谢您对此的任何建议。
【问题讨论】: