Считать ячейку из 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(); //перекладываем данные с общего массива в чистый массив
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д