web-dev-qa-db-ja.com

データセットをasp.net c#のExcelシートにエクスポートする

4つのテーブルを持つデータセットをExcelシートにエクスポートしようとしましたが、残念ながらエクスポートできません。データテーブルをExcelにエクスポートするコードがあります。したがって、データセットの代わりに、コードに "ExportToExcel"関数を呼び出し、データテーブルをExcelに4回エクスポートしました。しかし、最初のシートを作成すると、制御フローを停止します。コントロールが2番目の関数を呼び出さない( "ExportToExcel(dsResult.Tables [2]、" AthleteSentCount ");")これがコードです

protected void ExportToExcel(object sender, EventArgs e)
{
     ExportToExcel(dsResult.Tables[3], "AthleteInboxCount");
     ExportToExcel(dsResult.Tables[2], "AthleteSentCount");
     ExportToExcel(dsResult.Tables[0], "CoachInboxCount");
     ExportToExcel(dsResult.Tables[1], "CoachSentCount");
}

void ExportToExcel(DataTable dt, string FileName)
{
    if (dt.Rows.Count > 0)
    {
        string filename = FileName + ".xls";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        DataGrid dgGrid = new DataGrid();
        dgGrid.DataSource = dt;
        dgGrid.DataBind();

        //Get the HTML for the control.
        dgGrid.RenderControl(hw);
        //Write the HTML back to the browser.
        //Response.ContentType = application/vnd.ms-Excel;
        Response.ContentType = "application/vnd.ms-Excel";
        Response.AppendHeader("Content-Disposition", 
                              "attachment; filename=" + filename + "");
        this.EnableViewState = false;
        Response.Write(tw.ToString());
        Response.End();
    }
}

いずれかの組織が棒グラフ付きのExcelにデータセットをエクスポートすることを知っている場合は、私を助けてください。そうでなければ、問題の解決策を教えてください。

7
Arun Kumar T

まず最初に、関数がコンテンツのストリーミングを開始します

 Response.ContentType = "application/vnd.ms-Excel";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");

エンドユーザーとそれを終了するには

Response.End();

さらに、これを修正すると、コードは4つのExcelファイルを生成します。

スタックオーバーフローでExcelシートを作成するための既存のコードがあります: DataTableからExcelにワークシートを追加する方法 必要な唯一の変更は、ストリームにxlsxを保存し、このストリームをユーザーに送信します。

4
Piotr Stapp

WCFおよびASMXで記述


しかし、私はEPPulsを使用しました。 dlllファイルは、そのオープンソースdllです。参考のために以下のリンクを確認してください。 http://epplus.codeplex.com/

コード:

string excelFileName = @"E:\GOPI_16122016.xls";
 DataTable dt = ds.Tables[0];
 string worksheetsName = "Report";
 ExcelPackage pack = new ExcelPackage();
 ExcelWorksheet wrkSht = pack.Workbook.Worksheets.Add(worksheetsName);
 wrkSht.Cells["A1"].LoadFromDataTable(dt, true);
 pack.SaveAs(new FileInfo(excelFileName));
  MailMessage msg = new MailMessage();
                msg.To.Add(new MailAddress("[email protected]", "GOPIKRISHNA"));

                msg.From = new MailAddress("[email protected]", "Domain");
                msg.Subject = "REPORTS";
                string str = "Dear Team,<br/> Please find the Reports Details <br/><br/>";
                Attachment attachment = new System.Net.Mail.Attachment(excelFileName);
                msg.Attachments.Add(attachment);
                msg.Body = str ;
                msg.IsBodyHtml = true;
                SmtpClient client = new SmtpClient();
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("[email protected]", "");
                client.Port = 25; // You can use Port 25 if 587 is blocked (mine is!)
                client.Host = "[email protected]";
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.EnableSsl = true;
                client.Send(msg);
1
gopi krishna

DataSetを「実際の」Excel .xlsxファイルにエクスポートするには、無料のC#ライブラリをダウンロードして使用してください。

Microsoft OpenXMLライブラリを使用しており、コードは1行だけです。

Excelにエクスポート

あなたのコードはASP.Net Webアプリケーション用のようですので、私のライブラリを使用すると、コードは次のようになります:

protected void ExportToExcel(object sender, EventArgs e)
{
    CreateExcelFile.CreateExcelDocument(dsResult, "YourExcelfilename.xlsx", Response);
}

コードは1行だけで、実際のExcelファイルがページのResponseに書き込まれます。

DataSetのDataTableごとに1つのワークシートが含まれます。

0
Mike Gledhill

データセットをExcelにエクスポートする方法 に関するソースコードのサンプルを次に示します。 ExcelWorksheet.easy_insertDataSetメソッドを使用して、複数のデータテーブルを挿入できます。

他の質問については、このコードで 棒グラフ を確認し、コードを調整して次のような棒グラフを生成します。

xlsChart.easy_setChartType(Chart.CHART_TYPE_BAR_CLUSTERED);
0
alex.pulver