0

ボタンをクリックすると、このスプレッドシートを開いて、データベースから返されたすべてのデータ (データセット/データテーブル) をスプレッドシートのページの 1 つに書き込む必要があります。非常に多くの記事を見ました。データセットを新しい 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 分かかります。なぜそんなに時間がかかるのかわかりません。

4

1 に答える 1

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

新しいシートを追加したり、既存のシートを使用したりするなど、何をしたいかによって異なります。

これは、ここで詳細を示すコードプロジェクトのリンクです

于 2010-02-19T13:43:21.230 に答える