8

我试图将具有 4 个表的数据集导出到 excel 工作表,不幸的是我不能。我有将数据表导出到excel的代码。因此,我没有调用数据集,而是调用了代码中的“ExportToExcel”函数将数据表导出到 excel 4 次。但是一旦它创建了第一个工作表,它就会停止控制流。控件不调用第二个函数 ("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,请帮助我。否则,请给出您对问题的解决方案。

4

4 回答 4

4

首先,您的功能开始流式传输内容

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

到最终用户并结束它

Response.End();

此外,如果您修复此问题,您的代码将生成 4 个 excel 文件。

有一个用于在堆栈溢出时创建 Excel 工作表的现有代码:如何将其他工作表从 DataTable 添加到 Excel 您必须进行的唯一更改是将 xlsx 保存为流并将此流传输给用户。

于 2013-10-15T06:15:07.117 回答
1

用 WCF 和 ASMX 编写


但我使用了 EPPuls。dll 文件其开源 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("gopi@kanike.com", "GOPIKRISHNA"));

                msg.From = new MailAddress("No-reply@domain.co.in", "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("No-reply@domain.co.in", "");
                client.Port = 25; // You can use Port 25 if 587 is blocked (mine is!)
                client.Host = "domain@.com";
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.EnableSsl = true;
                client.Send(msg);
于 2016-12-16T04:06:18.697 回答
0

欢迎您下载并使用我的免费 C# 库将数据集导出到“真实”Excel .xlsx 文件。

它使用 Microsoft OpenXML 库,并且只需要一行代码。

导出到 Excel

看起来您的代码用于 ASP.Net Web 应用程序,因此使用我的库,您的代码将如下所示:

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

只需一行代码,您就会得到一个真实的 Excel 文件写入页面的Response

它将在您的 DataSet 中的每个 DataTable 中包含一个 Worksheet。

于 2014-01-09T07:59:21.777 回答
0

这是一些关于如何将数据集导出到 Excel的源代码示例。您可以使用 ExcelWorksheet.easy_insertDataSet 方法插入多个数据表。

关于另一个问题,请检查此条形图代码并调整代码以生成如下条形图:

xlsChart.easy_setChartType(Chart.CHART_TYPE_BAR_CLUSTERED);
于 2014-06-02T07:55:49.893 回答