Подключите нашего Telegram-бота для уведомлений о новых проектах
|
C# Netoffice: ускорение сохранения в excel
Разместить заказ
i
Заказчик
Отзывы фрилансеров:
+ 56
- 0
Зарегистрирован на сайте 15 лет и 6 месяцев
Бюджет:
по договоренности
Написал вот такую функцию с использованием NetOffice (функция для сохранения из datatable в excel)
===
public static void saveDataTableToExcelFile(string filePath, DataTable dt, out string error)
{
DataTable retVal = new DataTable();
error = "";
try
{
Excel.Application _excelApplication = new Excel.Application();
Excel.Workbook book = _excelApplication.Workbooks.Add();
Excel.Worksheet sheet = book.Worksheets[1] as Excel.Worksheet;
for (int c = 0; c <>hey! I did not invent this line of code,
// I found it somewhere on CodeProject.</small>
// <small>It works to add the whole row at once, pretty cool huh?</small>
//ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value =
//dt.Rows[Idx].ItemArray;
}
book.Activate();
sheet.Columns.AutoFit();
_excelApplication.ActiveWorkbook.SaveAs(filePath,
Missing.Value, Missing.Value, Missing.Value, false,
false, XlSaveAsAccessMode.xlExclusive);
//CleanUp
book.Close();
_excelApplication.Quit();
_excelApplication.Dispose();
}
catch (Exception exp)
{
error = exp.Message;
}
}
===
Но с большими объемами работает очень медленно (на ниже приведенном тесте можно ждать несколько минут)
===
#region todo remove
DataTable dt = new DataTable();
dt.Columns.Add("header1");
dt.Columns.Add("header2");
for (int i = 0; i < 50000; i++)
{
DataRow dr = dt.NewRow();
dr["header1"] = "1value_" + i;
dr["header2"] = "2value_" + i;
dt.Rows.Add(dr);
}
XlsHandlingNetOffice.
saveDataTableToExcelFile(filePath, dt,out error);
#endregion
===
Нужно ускорение, чтобы 50000 рядков не сохранялись дольше 10-15 сек.
===
public static void saveDataTableToExcelFile(string filePath, DataTable dt, out string error)
{
DataTable retVal = new DataTable();
error = "";
try
{
Excel.Application _excelApplication = new Excel.Application();
Excel.Workbook book = _excelApplication.Workbooks.Add();
Excel.Worksheet sheet = book.Worksheets[1] as Excel.Worksheet;
for (int c = 0; c <>hey! I did not invent this line of code,
// I found it somewhere on CodeProject.</small>
// <small>It works to add the whole row at once, pretty cool huh?</small>
//ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value =
//dt.Rows[Idx].ItemArray;
}
book.Activate();
sheet.Columns.AutoFit();
_excelApplication.ActiveWorkbook.SaveAs(filePath,
Missing.Value, Missing.Value, Missing.Value, false,
false, XlSaveAsAccessMode.xlExclusive);
//CleanUp
book.Close();
_excelApplication.Quit();
_excelApplication.Dispose();
}
catch (Exception exp)
{
error = exp.Message;
}
}
===
Но с большими объемами работает очень медленно (на ниже приведенном тесте можно ждать несколько минут)
===
#region todo remove
DataTable dt = new DataTable();
dt.Columns.Add("header1");
dt.Columns.Add("header2");
for (int i = 0; i < 50000; i++)
{
DataRow dr = dt.NewRow();
dr["header1"] = "1value_" + i;
dr["header2"] = "2value_" + i;
dt.Rows.Add(dr);
}
XlsHandlingNetOffice.
saveDataTableToExcelFile(filePath, dt,out error);
#endregion
===
Нужно ускорение, чтобы 50000 рядков не сохранялись дольше 10-15 сек.
Разделы:
Опубликован:
02.02.2015 | 21:28