我的应用程序试图解决的问题是:
目前,运行了几个存储过程,将数据从SQL结果中手动复制到空白电子表格中,并且报告分析人员格式化数据。这个过程被认为太长而且代价高昂。
理想的解决方案(在我看来)是一个.NET应用程序,它有一个组件,可以获取存储过程结果并将其写入工作表模板中的特定单元格区域(维护模板格式),然后我可以整理结果进入.NET应用程序的工作簿。
那里有没有这样的应用程序?更好的是,有没有人有更好的解决方案?
感谢您的考虑。
答案 0 :(得分:1)
我用来设置数据
以
的形式获取数据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);
}
这应该保持模板格式化,并且一次性设置数据,比按单元格设置单元格要快得多。
希望有所帮助
答案 1 :(得分:1)
您始终可以通过互操作使用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);
}
答案 2 :(得分:1)
SpreadsheetGear for .NET将允许您打开Excel工作簿,插入值并保存工作簿。
您可以查看Excel报告(即导出到Excel)样本here并下载免费试用here。
免责声明:我拥有SpreadsheetGear LLC
答案 3 :(得分:0)
在this question我要求类似的东西。不同之处在于我想要生成一个XML文件,该文件由Excel解释为电子表格。如果您可以将数据发送到XML文件,然后将XML转换为SpreadsheetML,那么这可能会解决您的问题。 但是,SpreadsheetXM确实有一些限制。它不需要安装Excel,转换可以快速实现。如果您使用Excel 2007,那么您可以使用第二种XML格式Microsoft Office XML格式。 基本上,它很慢,因为我怀疑你当前的代码是通过COM与Excel交互。