C# 用于Excel 2003电子表格生成的.NET组件,使用模板进行格式设置
我的应用程序试图解决的问题是: 目前,运行多个存储过程,将数据从SQL结果手动复制到一个空白电子表格中,并由报表分析员格式化数据。这一过程被认为太长,成本太高 理想的解决方案(在我看来)是一个带有组件的.NET应用程序,该组件可以获取存储过程结果并将其写入工作表模板中的特定单元格区域(维护模板格式),然后我可以将结果整理成.NET应用程序中的工作簿 有这样的应用吗?更妙的是,有谁有更好的解决方案吗 谢谢你的考虑。在年,我要求类似的东西。不同之处在于,我希望生成一个XML文件,由Excel将其解释为电子表格。如果您可以将数据发送到XML文件,然后将XML转换为SpreadsheetML,那么这可能会解决您的问题。 不过,电子表格XM确实有一些局限性。它不需要安装Excel,转换可以非常快。如果您使用Excel2007,那么您可以使用第二种XML格式,即。 基本上,它很慢,因为我怀疑您当前的代码正在通过COM与Excel交互。在中,我要求类似的东西。不同之处在于,我希望生成一个XML文件,由Excel将其解释为电子表格。如果您可以将数据发送到XML文件,然后将XML转换为SpreadsheetML,那么这可能会解决您的问题。 不过,电子表格XM确实有一些局限性。它不需要安装Excel,转换可以非常快。如果您使用Excel2007,那么您可以使用第二种XML格式,即。C# 用于Excel 2003电子表格生成的.NET组件,使用模板进行格式设置,c#,.net,excel,export-to-excel,C#,.net,Excel,Export To Excel,我的应用程序试图解决的问题是: 目前,运行多个存储过程,将数据从SQL结果手动复制到一个空白电子表格中,并由报表分析员格式化数据。这一过程被认为太长,成本太高 理想的解决方案(在我看来)是一个带有组件的.NET应用程序,该组件可以获取存储过程结果并将其写入工作表模板中的特定单元格区域(维护模板格式),然后我可以将结果整理成.NET应用程序中的工作簿 有这样的应用吗?更妙的是,有谁有更好的解决方案吗 谢谢你的考虑。在年,我要求类似的东西。不同之处在于,我希望生成一个XML文件,由Excel将其解释
基本上,它很慢,因为我怀疑您当前的代码是通过COM与Excel交互的。我使用什么来设置数据 以
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);
}
这将保持模板格式,并一次性设置数据,比逐个单元格设置数据快得多
希望这对我设置数据有帮助 以
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);
}
这将保持模板格式,并一次性设置数据,比逐个单元格设置数据快得多
希望对您有所帮助您可以通过互操作始终使用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);
}
您始终可以通过互操作使用Excel自动化。我曾经在期望的输出是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);
}
将允许您打开Excel工作簿,插入值并保存工作簿
您可以查看Excel报告(即导出到Excel)示例并下载免费试用版
免责声明:我拥有的SpreadsheetGear LLC将允许您打开Excel工作簿,插入值并保存工作簿
您可以查看Excel报告(即导出到Excel)示例并下载免费试用版
免责声明:我拥有SpreadsheetGear LLC啊,废话,我忘了提到我只限于Excel 2003。更新问题…我认为最大的问题是,您的解决方案似乎不允许我保留格式-是否有任何方法可以将模板格式应用于电子表格ML文档?电子表格ML允许一些简单格式,但不允许所有您想要的格式。查看它能做什么和不能做什么的最好方法是创建一个电子表格,然后将其导出到一个SpreadsheetML XML文件。(文件/另存为/XML电子表格。)重新打开此XML电子表格,查看剩下的格式。如果还可以的话,使用这个XML作为样式表的基础,将XML转换为电子表格……啊,废话,我忘了提到我只限于Excel 2003。更新问题…我认为最大的问题是,您的解决方案似乎不允许我保留格式-是否有任何方法可以将模板格式应用于电子表格ML文档?电子表格ML允许一些简单格式,但不允许所有您想要的格式。查看它能做什么和不能做什么的最好方法是创建一个电子表格,然后将其导出到一个SpreadsheetML XML文件。(文件/另存为/XML电子表格。)重新打开此XML电子表格,查看剩下的格式。如果还可以,请使用此XML作为样式表的基础,将XML转换为电子表格…在哪里可以访问ExcelGeneratorUtils来执行数字转换列?这是一个自定义函数。稍后我会给你一个例子,kx-)嘿,我找到了我以前的帖子,你可以在这里找到转换函数,谢谢堆。另一件我有点迷糊的事情是对象[,]-这是什么类型的?它只是一个二维对象数组,是要在电子表格中设置的行单元格的大小。更快的是,对象数组在集合出现之前生成,然后将数据设置为excel只发生一次,而不是逐个单元格。我将在这里寻找一个关于我是如何做到这一点的示例…在哪里可以访问ExcelGeneratorUtils来执行数字转换列?这是一个自定义函数。稍后我会给你一个例子,kx-)嘿,我找到了我以前的帖子,你可以在这里找到转换函数,谢谢堆。另一件我有点迷糊的事情是对象[,]-这是什么类型的?它只是一个二维对象数组,是要在电子表格中设置的行单元格的大小。使这一过程更快的是,生成了对象数组