你调用的对象是空的。访问Excel工作表单元格值时

时间:2012-09-26 06:19:00

标签: c# linq excel openxml

我需要从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)                     {  。 。 。 。 。 }

对象引用未设置为对象的实例。

1 个答案:

答案 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}}