我的应用程序试图解决的问题是:

目前,运行了几个存储过程,将数据从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 格式。 基本上,它很慢,因为我怀疑你当前的代码是通过COM与Excel交互。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top