более быстрый доступ к файлам Excel в C # - PullRequest
0 голосов
/ 05 ноября 2011

Мое приложение C # берет много данных из файла Excel и обрабатывает их, а затем записывает обратно в файл.

Проблема в том, что при загрузке данных из файла Excel это занимает некоторое время (30 секунд для около 7000 полей Excel)

Я хочу сделать это быстрее, есть ли способсделать это быстрее за значительное время?

Код, который я использую для извлечения данных:

streamReader = new StreamReader(@"ExcelPath.txt");
string path = streamReader.ReadLine();

//An Excel Application ==(contains)==> [Many] Excel WorkBook ==(contains)==>[Many] Excel WorkSheets==(contains)==>[Many] Ranges
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook myworkbook = excelapp.Workbooks.Open(path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true);

Microsoft.Office.Interop.Excel.Sheets myworksheets = myworkbook.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet myworksheet =myworksheets.get_Item(1);
Microsoft.Office.Interop.Excel.Range range = myworksheet.UsedRange;

string[] data = new string[range.Rows.Count];
int start = 0;
for (start = 3; start < range.Rows.Count; start++)
{
    Microsoft.Office.Interop.Excel.Range myrange = myworksheet.get_Range("O" + start.ToString(), System.Reflection.Missing.Value);
    data[start] = myrange.Text;
    }

1 Ответ

5 голосов
/ 05 ноября 2011

Я ничего не делал с Excel за долгое время ... но несколько лет назад мы смогли ускорить несколько наших процессов, которые читают данные из Excel, читая диапазоны ячеек с время в массив (вместо того, чтобы переходить от клетки к клетке).

Каждая операция чтения из C # в Excel должна проходить через COM, и это очень дорого. Если вам удастся уменьшить, сколько раз вам нужно читать из Excel (например, считывая несколько значений одновременно), вы увидите значительное улучшение скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...