Считать ячейку из excel - C#
Формулировка задачи:
Приветствую. Недавно начал юзать OpenXML сделал все как в справонике https://msdn.microsoft.com/ru-ru/library/office/hh298534.aspx
Получилось вот что:
Считывание одной ячейки занимает 17 секунд . Я так понял больше всего времени отжирает
Что делаю не так?
PS файл xlsx весом примерно 30мб
public static string GetCellValue(string fileName, string sheetName, string addressName) { string value = null; // открываем докумен только на чтение using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false)) { // Retrieve a reference to the workbook part. WorkbookPart wbPart = document.WorkbookPart; // найти лист по имени Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault(); // если нет листа if (theSheet == null) { throw new ArgumentException("sheetName"); } // Retrieve a reference to the worksheet part. WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(theSheet.Id)); // получаем ссылку на ячейку Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault(); if (theCell != null) { value = theCell.InnerText; if (theCell.DataType != null) { switch (theCell.DataType.Value) { case CellValues.SharedString: var stringTable = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault(); if (stringTable != null) { value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText; } break; case CellValues.Boolean: switch (value) { case "0": value = "FALSE"; break; default: value = "TRUE"; break; } break; } } } } return value;
// получаем ссылку на ячейку Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
Решение задачи: «Считать ячейку из excel»
textual
Листинг программы
Excel.Application xlApp = new Excel.Application(); //Excel Excel.Workbook xlWB; //рабочая книга Excel.Worksheet xlSht; //лист Excel Excel.Range Rng; //диапазон ячеек xlWB = xlApp.Workbooks.Open(@"G:\C#\Test Excel.xlsx"); //название файла Excel xlSht = xlWB.Worksheets["Лист1"]; //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1]; int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А int iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке //var arrData = (object[,])xlSht.Range["A1:M" + iLastRow].Value; //берём данные с листа Excel var arrData = (object[,])xlSht.Range[xlSht.Range["A1"], xlSht.Cells[iLastRow, iLastCol]].Value; //берём данные с листа Excel в двумерный массив int iTotalRows = arrData.GetUpperBound(0); int iTotalColumns = arrData.GetUpperBound(1); //цикл по строкам и столбцам массива с данными с листа for (int iRow = 1; iRow <= iTotalRows; iRow++) //цикл по строкам { for (int iCol = 1; iCol <= iTotalColumns; iCol++) //цикл по столбцам { //что-то делаем с данными //arrResult[iRowInResultArray, iCol-1] = arrData[iRow, iCol].ToString(); //перекладываем данные с общего массива в чистый массив } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д