我需要从Excel工作表中的每一行读取值,并按顺序对包含的值进行一些计算。我似乎遇到了访问值的一些问题,并希望有一些帮助调试下面的代码。
public void ProcessRows(IEnumerable<Row> dataRows, SharedStringTable sharedString)
{
try
{
//Extract the information for each row
foreach (Row row in dataRows)
{
var cellValues = from cell in row.Descendants<Cell>()
select ((cell.CellValue != null && cell.DataType!=null && cell.DataType.HasValue )
&& (sharedString.HasChildren && int.Parse(cell.CellValue.InnerText) < sharedString.ChildElements.Count)
? sharedString.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText
: ((cell.CellValue.InnerText != null)?cell.CellValue.InnerText:cell.CellValue.Text));
//Check to verify the row contained data.
if (cellValues != null && cellValues.Count() > 0)
{
//Create a productdetail object and add it to the list.
var values = cellValues.ToArray();
ProductItemDetail itemdetail = new ProductItemDetail();
itemdetail.RecordID = SessionRecordID;
if (values[0] != null)
itemdetail.Source = values[0].Trim();
if (values[1] != null)
itemdetail.Sourcename = values[1].Trim();
if (values[2] != null)
itemdetail.URLHomePage = values[2].Trim();
}
{
Catch(Exception ex)
{
throw ex;
}
}
当我在代码
中运行此行时,问题似乎发生了if(cellValues!= null&amp; cellValues.Count()&gt; 0) { 。 。 。 。 。 }
对象引用未设置为对象的实例。
答案 0 :(得分:1)
在您的LINQ选择中,您的条件为cell.CellValue != null
,如果为((cell.CellValue.InnerText != null)?cell.CellValue.InnerText:cell.CellValue.Text)
,如果为cell.CellValue != null
,如果cell.CellValue.InnerText != null
为假,则public void ProcessRows(IEnumerable<Row> dataRows, SharedStringTable sharedString)
{
try
{
//Extract the information for each row
foreach (Row row in dataRows)
{
var cellValues = from cell in row.Descendants<Cell>()
select ((cell.CellValue != null && cell.DataType!=null && cell.DataType.HasValue )
&& (sharedString.HasChildren && int.Parse(cell.CellValue.InnerText) < sharedString.ChildElements.Count)
? sharedString.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText
: ((cell.CellValue != null && cell.CellValue.InnerText != null)?cell.CellValue.InnerText:cell.CellValue.Text));
//Check to verify the row contained data.
if (cellValues != null && cellValues.Count() > 0)
{
//Create a productdetail object and add it to the list.
var values = cellValues.ToArray();
ProductItemDetail itemdetail = new ProductItemDetail();
itemdetail.RecordID = SessionRecordID;
if (values[0] != null) { itemdetail.Source = values[0].Trim(); }
if (values[1] != null) { itemdetail.Sourcename = values[1].Trim(); }
if (values[2] != null) { itemdetail.URLHomePage = values[2].Trim(); }
}
}
}
Catch(Exception ex)
{
throw ex;
}
}
将导致您的错误
请尝试:
{{1}}