Экспорт в excel занимает слишком много времени

У меня есть 7 таблиц данных (с разным количеством строк, столбцов) на моей странице asp.net (C#). Я показываю данные на своей странице с помощью GridViews. Существует требование экспортировать эти таблицы данных в файл Excel таким образом, чтобы мне понадобились данные первых 5 таблиц данных на первом листе, включая их графики, данные 6-й таблицы данных на 2-м листе и данные 7-й таблицы данных на 3-м листе того же файл Excel. Я реализовал решение, используя взаимодействие с Excel. Первый лист (с 5 таблицами данных и графиками) загружается нормально. Но загрузка второго и третьего листов занимает слишком много времени (4000-5000 строк данных и около 50 столбцов на каждом листе).

Есть ли способ их быстро загрузить?

Я использую следующий код:

Worksheet xlWorksheet2 = null;

//Create Excel Sheets

xlSheets = ExcelApp.Sheets;

xlWorksheet2 = (Worksheet)xlSheets.Add(xlSheets[2], Type.Missing, Type.Missing, Type.Missing);

xlWorksheet2.Name = "Dump-1";

table = Dump1();
for (int j = 1; j < table.Columns.Count + 1; j++)
{
    ExcelApp.Cells[1, j] = table.Columns[j - 1].ColumnName;
}

// Storing Each row and column value to excel sheet
for (k = 0; k < table.Rows.Count; k++)
{
    for (int l = 0; l < table.Columns.Count; l++)
    {
        ExcelApp.Cells[k + 2, l + 1] = table.Rows[k].ItemArray[l].ToString();

    }
}

В VBA вы можете использовать Application.Calculation = xlCalculationManual и Application.ScreenUpdating = False, чтобы ускорить такие вещи. Поскольку вы используете взаимодействие с Excel, вы также можете сделать это и на C#.

Noren 10.09.2018 08:54

Некоторое время я работал над этим. Что вы можете сделать, так это взять содержимое таблицы в виде массива и записать этот массив в excel. Допустим, у вас есть 2D-массив из 5 элементов, вы можете сделать ExcelApp.Cells ("A1: A5"). Value = myArray. Это работает в vba и, я уверен, может работать в C#.

shahkalpesh 10.09.2018 08:57

Я использовал ExcelApp.Cells ["A1: E5"] = myArray; , но выдает ошибку: «Параметр неверен. (Исключение из HRESULT: 0x80070057 (E_INVALIDARG))»

DeepakVerma 10.09.2018 09:13

A1: E5? Я не знаю, что будет с этим вместо A1: A5

KSib 10.09.2018 21:47

Я решил проблему ... Я использовал объект [,] arr = новый объект [dt.Rows.Count + 1, dt.Columns.Count]; Затем я заполнил указанный выше массив, а затем Range c1 = (Range) xlWorksheet2.Cells [1, 1]; Диапазон c2 = (Диапазон) xlWorksheet2.Cells [dt.Rows.Count + 1, dt.Columns.Count]; Диапазон диапазона = xlWorksheet2.get_Range (c1, c2); range.Value = arr;

DeepakVerma 26.09.2018 11:46
0
5
238
0

Другие вопросы по теме