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