打开现有的空电子表格并将数据写入其中

时间:2010-02-19 13:25:55

标签: asp.net spreadsheet

我有一个包含多个页面的电子表格。当我点击一个按钮时,我需要打开这个电子表格,并将从数据库返回的所有数据(数据集/数据表)写入电子表格中的一个页面。我看到了如此多的文章用于将数据集导出到新的Excel工作表。我是否打开现有的电子表格并使用asp.net / C#将数据集写入其中?

请帮助..

感谢。

更新

基本上我有以下代码将数据集导出到新的Excel工作表。

private void createDataInExcel(DataSet ds)
 {

    Application oXL;

    _Workbook oWB;

    _Worksheet oSheet;

    Range oRng;

    string strCurrentDir = Server.MapPath(".") + "\\excelreports\\";

    try
    {

        oXL = new Application();

        oXL.Visible = false;

        //Get a new workbook.

        oWB = (_Workbook)(oXL.Workbooks.Add(Missing.Value));

        oSheet = (_Worksheet)oWB.ActiveSheet;

        //System.Data.DataTable dtGridData=ds.Tables[0];

        int iRow = 2;

        if (ds.Tables[0].Rows.Count > 0)
        {


            for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
            {

                oSheet.Cells[1, j + 1] = ds.Tables[0].Columns[j].ColumnName;

            }

            // For each row, print the values of each column.

            for (int rowNo = 0; rowNo < ds.Tables[0].Rows.Count; rowNo++)
            {

                for (int colNo = 0; colNo < ds.Tables[0].Columns.Count; colNo++)
                {

                    oSheet.Cells[iRow, colNo + 1] = ds.Tables[0].Rows[rowNo][colNo].ToString();

                }
                iRow++;

            }              

        }

        oRng = oSheet.get_Range("A1", "IV1");

        oRng.EntireColumn.AutoFit();

        oXL.Visible = false;

        oXL.UserControl = false;

        string strFile = "excelreport" + DateTime.Now.Ticks.ToString() + ".xls";//+

        oWB.SaveAs(strCurrentDir +strFile, XlFileFormat.xlWorkbookNormal, null, null, false, false, XlSaveAsAccessMode.xlShared, false, false, null,null, null);

        // Need all following code to clean up and remove all references!!!

        oWB.Close(null, null, null);

        oXL.Workbooks.Close();

        oXL.Quit();

        Marshal.ReleaseComObject(oRng);

        Marshal.ReleaseComObject(oXL);

        Marshal.ReleaseComObject(oSheet);

        Marshal.ReleaseComObject(oWB);


    }

    catch (Exception theException)
    {

        Response.Write(theException.Message);

    }
    Response.Write("data exported");

}

是否有可能改进上面的代码将数据集写入现有的工作表?还有上面的代码花了大约一分钟将数据写入excel表。我不明白为什么需要这么长时间。

1 个答案:

答案 0 :(得分:0)

不是100%确定您的代码所在,但是使用项目中引用的excel com对象,您可以使用Workbooks._Open方法打开工作簿,然后您可以使用工作簿的工作簿获取工作簿工作簿和get_Item。

如果您需要在工作簿中添加工作表,可以使用工作表收集上的添加。

也许如果您发布代码,我们可以建议在哪里进行改进。

这一行

oWB = (_Workbook)(oXL.Workbooks.Add(Missing.Value));

正在创建一个新的工作簿。使用

string workbookPath = "c:/SomeWorkBook.xls";

oWB = Workbooks.Open(workbookPath,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);

现在它取决于你想要做什么添加新表,使用现有表等。

这是一个代码项目链接,可以更深入地展示here