На самом деле я легко могу прочитать содержимое ListObject в VSTO, используя следующий код.
В этом примере я читаю все продукты с данного листа.Данные редактируются с использованием таблицы Excel, которая преобразуется в объект ListObject внутри VSTO.Я использую 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;
}
Но иногда пользователь хочет добавить еще одну строку или даже изменить порядок столбцов таблицы.Поэтому я хотел бы знать, есть ли лучший способ ссылаться на каждую строку по имени столбца вместо индекса столбца.
Приемлемым решением для этого будет что-то вроде этого:* Заранее спасибо за любые советы по этому вопросу.