Как повысить скорость работы с Excel - C#
Формулировка задачи:
Получаю из Excel данные,
конвертирую их в массив строк
и закрываю. Но мне рили не нравится скорость работы. Возможно ли каким то образомпофиксить медленную скорость
работы? Или с СОМами всегда в режимеслоу моушн
работа? public ParseMaterialFileTemp()
{
ObjExcel = new Exc.Application();
def = new DafaultTableValue();
}
int rowIndex = 0;
int columnIndex = 0;
private Exc.Application ObjExcel;
private Exc.Workbook ObjWorkBook;
private Exc.Worksheet ObjWorkSheet;
private DafaultTableValue def;
protected override void GetData(object value)
{
//получение файла Excel
ObjWorkBook = ObjExcel.Workbooks.Open((string)value, 0, true, 5, "", "", false, Exc.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
ObjWorkSheet = (Exc.Worksheet)ObjWorkBook.Sheets[1];
//Получение размерности
rowIndex = ObjWorkSheet.UsedRange.Rows.Count;
columnIndex = ObjWorkSheet.UsedRange.Columns.Count;
string[,] cellValue = new string[columnIndex, rowIndex];
for (int i = 1; i < columnIndex + 1; i++)
{
for (int j = 1; j < rowIndex + 1; j++)
{
Exc.Range cellRange = (Exc.Range)ObjWorkSheet.Cells[j, i];
if (cellRange.Value != null)
{
cellValue[i - 1, j - 1] = cellRange.Value.ToString();
}
}
}
ObjWorkBook.Close(false, false, false);
GC.Collect();
GC.WaitForPendingFinalizers();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ObjWorkBook);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ObjExcel);
}
OLE query быстрее работает или нет? Может LINQ?
Решение задачи: «Как повысить скорость работы с Excel»
textual
Листинг программы
using System;
using System.Diagnostics;
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
namespace ConsoleApplication41
{
class Program
{
static void Main()
{
const string outputXlsx = "output.xlsx";
var sw = Stopwatch.StartNew();
using (var spreadsheetDocument = SpreadsheetDocument.Create(outputXlsx, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
var data = new SheetData();
for (int i = 0; i < 13000; i++)
{
var row = new Row();
data.AppendChild(row);
var cells = Enumerable.Range(1, 10).Select(x => new Cell { CellValue = new CellValue(x.ToString()) });
row.Append(cells);
}
worksheetPart.Worksheet = new Worksheet(data);
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "mySheet"
};
sheets.AppendChild(sheet);
workbookpart.Workbook.Save();
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
Process.Start(outputXlsx);
}
}
}