我尝试将具有2个表的数据集导出到Excel工作表,遗憾的是我不能。
我有将数据表导出为excel的代码。因此,我在代码中调用ExportToExcel
函数而不是数据集,将数据表导出为excel 4次。但是一旦它创建了第一张纸,就会停止控制流程。 Control不会调用第二个函数
ExportToExcel(getReports.Tables[1], "ConsumerBookedSlots");
以下是代码:
public ActionResult GetCuratorsAvailability(string availabilitydate)
{
string fromDate = "";
string endDate = "";
if (availabilitydate != "")
{
fromDate = availabilitydate.Split('-')[0];
endDate = availabilitydate.Split('-')[1];
if (DateTime.Parse(endDate) >= DateTime.Parse(fromDate))
{
DataSet getReports = AdminBLL.GetCuratorsAvailability(fromDate, endDate);
ExportToExcel(getReports.Tables[0], "CuratorsAvailableSlots");
ExportToExcel(getReports.Tables[1], "ConsumerBookedSlots");
}
}
return View("Reports");
}
public void ExportToExcel(DataTable dt, string FileName)
{
if (dt.Rows.Count > 0)
{
if (System.Web.HttpContext.Current.Response.RedirectLocation == null)
{
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.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
Response.ContentType = "application/vnd.ms-excel";
Response.Write(tw.ToString());
Response.Flush();
Response.End();
}
}
}
我无法下载getReports.Tables[1]
数据,因为我收到此错误:
发送http标头后,服务器无法附加标头。 MVC
它在浏览器中出错后正在下载firstfile。
答案 0 :(得分:1)
下载第一个文件后,执行命中此行 -
Response.End();
这意味着,响应已结束,标头已发送到客户端。您无法启动第二个文件的下载。如果您想通过单击按钮下载多个文件,则需要将其压缩为一个文件,然后启动下载。
要压缩文件,您可以执行此操作 -
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
来自here的摘录。
如果您希望将两个excel电子表格作为单个Excel文档的一部分,将其中每个电子表格作为工作表,则可以使用ClosedXML。
答案 1 :(得分:0)
我曾多次使用ClosedXML(一个OpenXML实现),包括在ASP.NET MVC应用程序中,它就像一个魅力。
导出数据非常简单:
using (var memoryStream = new MemoryStream())
{
using (XLWorkbook workbook = new XLWorkbook())
{
using (IXLWorksheet worksheet = workbook.AddWorksheet("WorksheetName"))
{
var toExport = GetData();
worksheet.Row(1).Style.Font.Bold = true;
worksheet.Cell(1, 1).Value = "Column 1";
worksheet.Cell(1, 2).Value = "Column 2";
worksheet.Cell(1, 3).Value = "Column 3";
// Export the data and set some properties
worksheet.Cell(2, 1).Value = toExport.AsEnumerable();
worksheet.RangeUsed().SetAutoFilter();
worksheet.Columns().AdjustToContents();
workbook.SaveAs(memoryStream);
memoryStream.Position = 0;
return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "filename.xlsx");
}
}
}