0

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

目前,运行了几个存储过程,将数据从 SQL 结果中手动复制到空白电子表格中,并由报告分析师格式化数据。这个过程被认为太长而且成本太高。

理想的解决方案(在我看来)是一个 .NET 应用程序,其组件可以获取存储过程结果并将其写入工作表模板中的特定单元格区域(维护模板格式),然后我可以将结果整理到工作簿中在 .NET 应用程序中。

有没有这样的应用程序?更好的是,有人有更好的解决方案吗?

感谢您的考虑。

4

4 回答 4

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);
        }

这应该保持模板格式,并一次性设置数据,比逐个单元格设置要快得多。

希望有帮助

于 2009-09-10T14:04:57.527 回答
1

您始终可以通过互操作使用 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);


        }
于 2009-09-10T14:12:17.390 回答
1

SpreadsheetGear for .NET可让您打开 Excel 工作簿、插入值并保存工作簿。

您可以在此处查看 Excel 报告(即导出到 Excel)示例并此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-09-10T14:17:49.767 回答
0

这个问题中,我要求类似的东西。不同之处在于我想要一些东西来生成一个由 Excel 解释为电子表格的 XML 文件。如果您可以将数据发送到 XML 文件,然后将 XML 转换为 SpreadsheetML,那么这可能会解决您的问题。不过,SpreadsheetXM 确实有一些限制。它不需要安装 Excel,而且转换速度非常快。如果您使用 Excel 2007,那么您可以使用第二种 XML 格式,即Microsoft Office XML格式。基本上,它很慢,因为我怀疑您当前的代码正在通过 COM 与 Excel 交互。

于 2009-09-10T14:01:29.060 回答