Компонент .NET для Excel 2003 генерация электронных таблиц с использованием шаблонов для форматирования
-
05-07-2019 - |
Вопрос
Проблема, которую пытается решить мое приложение, заключается в следующем:
В настоящее время выполняется несколько хранимых процедур, данные вручную копируются из результатов SQL в пустую электронную таблицу, и аналитики-отчеты форматируют данные. Этот процесс был признан слишком долгим и дорогостоящим.
Идеальным решением (на мой взгляд) является приложение .NET с компонентом, который может взять результат хранимой процедуры и записать его в определенный диапазон ячеек в шаблоне рабочего листа (поддерживая форматирование шаблона), а затем я могу просто сопоставить результаты в рабочие книги в приложении .NET.
Есть ли такие приложения? Еще лучше, у кого-нибудь есть лучшие решения?
Спасибо за ваше внимание.
Решение
Что я использую для установки данных
получить данные в виде
object[,] excelSpreadsheetData
затем примените данные, установив
public void SetWorksheetData(long rowCount, long columnCount, object[,] excelSpreadsheetData, int startingRow, int startingCol, Worksheet worksheet)
{
if (rowCount == 0 || columnCount == 0) return;
//set the region data.
object m_objOpt = Missing.Value;
Range cellRange = worksheet.get_Range(ExcelGeneratorUtils.ExcelColumnFromNumber(startingCol) + startingRow, m_objOpt);
cellRange = cellRange.get_Resize(rowCount, columnCount);
cellRange.set_Value(m_objOpt, excelSpreadsheetData);
}
Это должно сохранить форматирование шаблона и установить данные за один раз, намного быстрее, чем установка ячейки, по ячейке.
Надеюсь, это поможет
Другие советы
SpreadsheetGear for .NET позволит вам открывать книги Excel, вставлять значения и сохранять книгу. р>
Вы можете ознакомиться с образцами отчетов Excel (т.е. экспортировать в Excel) здесь и загрузите бесплатную пробную версию здесь .
Отказ от ответственности: мне принадлежит SpreadsheetGear LLC
Вы всегда можете использовать Excel Automation через взаимодействие. Я делал это в тех случаях, когда желаемым результатом является Excel. Это удивительно быстро, но вы должны быть осторожны, чтобы убирать за собой и не оставлять экземпляры Excel запущенными. Вот краткий пример.
using Excel = Microsoft.Office.Interop.Excel;
Excel.ApplicationClass _Excel;
Excel.Workbook WB;
Excel.Worksheet WS;
_Excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
WB = _Excel.Workbooks.Add(System.Reflection.Missing.Value);
WS = (Excel.Worksheet)WB.Worksheets[1];
WS.Name = "Test";
try
{
int row;
int col;
WS.Cells[++row, col] = "COL1";
WS.Cells[row, ++col] = "COL2";
WS.get_Range("A1", "A2").Font.Bold = true;
WS.get_Range("A1", "A2").HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;
WS.Cells[++row, col] = "Customer";
WS.Cells[++row, col] = "Expenses"
WS.get_Range("A1", "B1").Font.Bold = true;
WS.Columns.AutoFit();
WS.Rows.AutoFit();
WS.Activate();
_Excel.Visible = true;
}
catch (Exception ex)
{
WB.Close(false, Type.Missing, Type.Missing);
_Excel.Quit();
throw;
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WS);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel);
}
В этом вопросе я задал нечто похожее. Разница в том, что я хочу, чтобы что-то сгенерировало XML-файл, который Excel интерпретирует как электронную таблицу. Если бы вы могли отправить данные в файл XML, а затем преобразовать XML в SpreadsheetML, это может решить вашу проблему. SpreadsheetXM имеет несколько ограничений. Это не потребует установки Excel, и преобразование может быть очень быстрым. А если вы используете Excel 2007, то есть второй формат XML, который вы могли бы использовать, Microsoft Office XML формат. В основном это медленно, потому что я подозреваю, что ваш текущий код взаимодействует с Excel через COM.