2016-04-01 19 views
0

Bir MVC Uygulamasında Excel dosyasını okumam gereken bir senaryo var, sunucuda çalışmam gerekiyor, bu yüzden Açık XML kullanıyorum, Kodun sayfasındaki satırların döngüsüne girmediği bir sorun, lütfen aşağıda yer alan koduma bakın ve kodumu nasıl düzeltebileceğime dair öneride bulunun.Açık XML Okuma Excel dosyası excel sayfasını okumak için döngü girmiyor

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

Herhangi bir fikir, senin Yardım büyük Yaklaşan birden çalışıyorlar ama bazı tuhaf nedenle fr foreach döngüsünde almıyorum, takdir edilecektir.

Excel 2013 kullanıyorum ve lütfen çalışma kitabımın resmine bakınız.

Here is my Excel sheet template

cevap

1

benim için çalışıyor Aşağıdaki kodu kullanıyoruz.

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

Bu yardımcı olursa bana bildirin.

Yoksa değiştireceğim ben excel sayfa adı "Hasar" kullandık

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

Not aşağıdaki kodunuzu kullanmak, bu yüzden çalışıp çalışmadığını kontrol edebilir evet ise; jenerik

+0

Bunu yapmak için başka bir işleve koyun, hala çalışmıyor, onun for döngüsüne girmiyor, GetWorksheetPart (workbookPart, sSheetName); yöntem tanımlandı mı? Birçok farklı yaklaşımı denedim, şans yok. HasChildrenSheets yanlış döndürür, bu nedenle, HasChildrenSheets kodunu kaldırırsa, döngüyü – Papi

+0

döngüsünde değil, bu ifadeyi girer, ancak bu işlevin özel statik WorksheetPart GetWorksheetPart (WorkbookPart workbookPart, string sheetName) döndürür dize relId = çalışma kitabıPart.Workbook.Descendants () .First (s => sheetName.Equals (s.Name)) Id; return (WorksheetPart) çalışma kitabıPart.GetPartById (relId); } – A3006

+0

Hala döngü girmek için mücadele ediyorum, neden hiçbir fikrim yok – Papi

İlgili konular