2016-04-01 1 views
0

У меня есть сценарий, где мне нужно прочитать файл Excel в приложении MVC, мне нужно, чтобы это выполнялось на сервере, поэтому я использую Open XML, у меня есть проблема, когда мой код не вводит петлю строк в листе, см. мой код ниже и советы о том, как я могу исправить свой код.Open XML Reading Excel файл не вводит цикл для чтения листа excel

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; 
      } 
     } 
    } 
} 

Любые идеи, ваша помощь будет принята с благодарностью, я пытался множественным приближается, но я не получаю в цикле Еогеасп пт какой-то причине.

Я использую Excel 2013 и, пожалуйста, см. Ниже изображение моей книги.

Here is my Excel sheet template

ответ

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; 
     } 
    } 
} 

Обратите внимание, что я использовал Эксла имени листа «Требования», так что проверить, работает ли он, и если да, поместите его в другую функцию, чтобы сделать его общим

+0

Его все еще не работает, его не входит в цикл for, также где находится GetWorksheetPart (workbookPart, sSheetName); метод определен? Я пробовал много разных подходов, не повезло. HasChildrenSheets retuns false, поэтому он пропускает цикл, если я удаляю код HasChildrenSheets, он вводит выражение, но не код в цикле – Papi

+0

Эта функция ничего, но возвращает личный личный статический лист WorksheetPart GetWorksheetPart (WorkbookPart workbookPart, string sheetName) { string relId = workbookPart.Workbook.Descendants (). Первый (s => sheetName.Equals (s.Name)). Id; return (WorksheetPart) workbookPart.GetPartById (relId); } – A3006

+0

Я все еще борюсь за вход в цикл, я понятия не имею, почему – Papi

Смежные вопросы