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