Excel is telling me that there is unreadable data, and so after I say to try to recover the information, it shows the correct data. When I open the text file of the xlsx, though, I get all of the html for the entire page, instead of just the gridview (which is probably the unreadable content Excel is talking about).
Here is my code:
public void ExcelDownload(object sender, EventArgs e)
{
DataSet _MailingListUsers = db.GetMailingList();
DataTable mailTable = _MailingListUsers.Tables[0];
DumpExcel(mailTable);
}
private void DumpExcel(DataTable tbl)
{
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Mailing List");
//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A2"].LoadFromDataTable(tbl, false);
//Header Titles
ws.Cells["A1"].Value = "Employee Name";
ws.Cells["B1"].Value = "Email Address";
ws.Cells["C1"].Value = "Phone";
ws.Cells["D1"].Value = "Business Unit";
ws.Cells["E1"].Value = "Site";
ws.Cells["A1"].AutoFitColumns();
//Format the header for column 1-3
using (ExcelRange rng = ws.Cells["A1:E1"])
{
rng.Style.Font.Bold = true;
//Set Pattern for the background to Solid
rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
//Set color to dark blue
rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79, 129, 189));
rng.Style.Font.Color.SetColor(System.Drawing.Color.White);
}
//Write it back to the client
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=MailingList.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
}
}
Any ideas about what might be happening? Someone suggested using EPPlus after I had the same problems trying to send HTML data to Excel, and it was sending the entire page, instead of just the gridView.
Thanks
EPPlus does not work with the XLS format. Only XLSX. You'll need to find a new library.
NET Core from version 2.0. EPPlus has no dependencies to any other library such as Microsoft Excel. The library is designed with the developer in mind.
EPPlus 5/6 has new methods added to the ExcelRange for exporting data to csv files, streams, strings and data tables.
I'm missing the Response.Clear()
and the Response.End()
:
try {
var pck = new OfficeOpenXml.ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Mailing List");
ws.Cells["A2"].LoadFromDataTable(tbl, false);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=MailingList.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
} catch (Exception ex) {
//log error
}
Response.End();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With