Open XML Reading Excel文件没有进入循环来读取excel表

时间:2016-04-01 09:23:24

标签: c# excel openxml

我有一个场景,我需要在MVC应用程序中读取Excel文件,我需要在服务器上运行,因此我使用Open XML,我有一个问题,我的代码不会进入行的循环请参阅下面的代码,并提供有关如何纠正我的代码的建议。

if (file.ContentLength > 0)
{
    string path = file.FileName;    
    using (SpreadsheetDocument doc = SpreadsheetDocument.Open(path, false))
    {
        WorkbookPart workbookPart = doc.WorkbookPart;
        WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
        SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

        foreach (Row r in sheetData.Elements<Row>())
        {
            foreach (Cell c in r.Elements<Cell>())
            {
                string text = c.CellValue.Text;
            }
        }
    }
}

任何想法,你的帮助将不胜感激,我一直在尝试多次接近,但我没有进入foreach循环,有些奇怪的原因。

我正在使用Excel 2013,请参阅下面的工作簿图片。

Here is my Excel sheet template

1 个答案:

答案 0 :(得分:1)

我一直在使用以下代码,对我来说很好。

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = GetWorksheetPart(workbookPart, sSheetName);

    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

    bool bHasChildren = sheetData.HasChildren;
    if (bHasChildren)
    {
        for (int iCounter1 = 1; iCounter1 < sheetData.Elements<Row>().Count(); iCounter1++)
        {
            Row rDataRow = sheetData.Elements<Row>().ElementAt(iCounter1);
            for (int iCounter = 0; iCounter < rDataRow.ChildElements.Count; iCounter++)
            {
                Cell oCell = (Cell)rDataRow.ChildElements[iCounter];
            }
        }
    }
}

如果这有帮助,请告诉我。

或者您可以将代码用于以下更改

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(sFileNameWithPath, false))
{
    WorkbookPart workbookPart = doc.WorkbookPart;

    string relId = workbookPart.Workbook.Descendants<Sheet>().First(s => "Claims".Equals(s.Name)).Id;
    WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(relId);

    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

    foreach (Row r in sheetData.Elements<Row>())
    {
        foreach (Cell c in r.Elements<Cell>())
        {
            string text = c.CellValue.Text;
        }
    }
}

请注意,我使用了Excel工作表名称&#34; Claims&#34;,因此请检查它是否有效,如果是,把它放在另一个函数中使其成为通用的