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にデータセットをエクスポートすることを知っている場合は、私を助けてください。そうでなければ、問題の解決策を教えてください。
まず最初に、関数がコンテンツのストリーミングを開始します
Response.ContentType = "application/vnd.ms-Excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
エンドユーザーとそれを終了するには
Response.End();
さらに、これを修正すると、コードは4つのExcelファイルを生成します。
スタックオーバーフローでExcelシートを作成するための既存のコードがあります: DataTableからExcelにワークシートを追加する方法 必要な唯一の変更は、ストリームにxlsxを保存し、このストリームをユーザーに送信します。
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);
DataSetを「実際の」Excel .xlsxファイルにエクスポートするには、無料のC#ライブラリをダウンロードして使用してください。
Microsoft OpenXMLライブラリを使用しており、コードは1行だけです。
あなたのコードはASP.Net Webアプリケーション用のようですので、私のライブラリを使用すると、コードは次のようになります:
protected void ExportToExcel(object sender, EventArgs e)
{
CreateExcelFile.CreateExcelDocument(dsResult, "YourExcelfilename.xlsx", Response);
}
コードは1行だけで、実際のExcelファイルがページのResponseに書き込まれます。
DataSetのDataTableごとに1つのワークシートが含まれます。
データセットをExcelにエクスポートする方法 に関するソースコードのサンプルを次に示します。 ExcelWorksheet.easy_insertDataSetメソッドを使用して、複数のデータテーブルを挿入できます。
他の質問については、このコードで 棒グラフ を確認し、コードを調整して次のような棒グラフを生成します。
xlsChart.easy_setChartType(Chart.CHART_TYPE_BAR_CLUSTERED);