2015-03-09 5 views
1

Я пишу программу C# для чтения файла excel с использованием OpenXML. У меня есть список слов, добавленных в столбец в файле excel в столбце. Я хочу их прочитать и добавить в список массивов. Я использую ниже кодЧтение файла Excel с использованием OpenXML

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePatah + "\\" + fileName, false)) 
{ 
     WorkbookPart workbookPart = doc.WorkbookPart; 
     WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
     SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

     ArrayList data = new ArrayList(); 
     foreach (Row r in sheetData.Elements<Row>()) 
     { 
      foreach (Cell c in r.Elements<Cell>()) 
      { 
      data.Add(c.CellValue.Text); 
      } 
     } 
} 

Что я Seing является 1,2,3,4 и т.д. с этим временем я ожидаю слово в список. Что мне нужно сделать, чтобы получить слова?

+0

Связанный пост [здесь] (https://stackoverflow.com/q/5115257/465053). – RBT

ответ

3

Фактические строки хранятся в SharedStringTable. То, что вы получаете, - это только ссылки на элементы этой таблицы строк.

Вот ваш пример модифицирован для извлечения значений из таблицы строки:

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePatah + "\\" + fileName, false)) 
{ 
    WorkbookPart workbookPart = doc.WorkbookPart; 
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

    ArrayList data = new ArrayList(); 
    foreach (Row r in sheetData.Elements<Row>()) 
    { 
     foreach (Cell c in r.Elements<Cell>()) 
     { 
     if (c.DataType != null && c.DataType == CellValues.SharedString) 
     { 
      var stringId = Convert.ToInt32(c.InnerText); // Do some error checking here 
      data.Add(workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(stringId).InnerText); 
     } 
     } 
    } 
} 

Пожалуйста, обратите внимание, что это всего лишь грубый пример. Для получения более полных примеров вы можете посмотреть here.

Кроме того, в зависимости от того, что вам нужно, вы можете использовать библиотеку, такую ​​как EPPlus, намного проще (вы можете читать и писать непосредственно в ячейки, не беспокоясь о фактическом формате документа), чем OpenXML SDK.

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