Как повысить скорость работы с 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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5