ASP.Net Export Data to Excel - c#

Wondering what is a good library I can use with VS2005 to export data to a excel file. The file has some formatting like background colors and colspans.
Thanks

Here is some code that uses a trick to output HTML to an Excel file. I have found that you can trick excel into opening an HTML by setting the content type of the output to "application/excel".
In the code below secresults is an HTML div like so:
<div id="secresults" runat="server" visible="false" class="secresults">
Content or data here.
</div>
In code behind:
Response.ClearContent();
string filename = "Output" + istartDate.ToShortDateString() + ".xls";
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
secresults.RenderControl(htw);
Response.Write(sw.toString());
Response.End();
I have found that you can use some html formatting in excel. To test which formatting you can use you can create an html file and rename it to a .xls file, then open it with excel. You can get a pretty good idea about what HTML Excel will read.

I would recommend taking the class from the following website, and adapting it to your needs.
Mikes Knowledge Base - ExportToExcel
By default, this class takes a DataSet, DataTable or List<>, and exports it into a genuine Excel 2007 .xlsx file, using the OpenXML libraries (also provided).
It doesn't currently attempt to add any formating to the Excel cells (DataTables only store values, not formating, colors, horizontal alignment, etc !) but it should be a good place to start from.
All source code is provided, free of charge, so you can adapt it as required.
Good luck !

I have used this library in the past, but I normally just spit out a CSV file.
C# class library for exporting data to CSV/Excel file

If you have predefined layout of the document, Templater will probably fit your description.
Take a look at the example on how to use it.

I've used this codeplex project (Excel Package). One technique is to start with a formatted template, then modify the template. That is much easier than applying a lot of styling commands starting with an empty spreadsheet.

Related

Export to excel opening it

I currently have an option in my app to export to Excel. It saves the data to a file in disk.
I would like to open Excel instead and show the data. Do any of you know if this is possible and how to accomplish it?
I guess I can just open the file I'm already saving to disk, but it would be just better to not save a file to disk at all.
I am assuming you are using Interop. Just set the Application to Visible.
excelApp.Visible = true;
where
InteropExcel.Application excelApp;
Just remember to still release all the COM references so that your application does not also hold a handle to Excel. That may cause your Excel file to be read-only.
How are you currently creating your file?
If you are using the Excel engine or POI (or what ever thier abbreviation is) to create an XLS / XLSX it would just be a case of not saving the workbook and making the instance visible (as per above)?
If you are not dependant on or do not want to be dependant on Excel (i.e. using 3rd party libraries like Syncfusion to create the file) or just outputting your data in an excel readable format like CSV, then I guess you're stuck with a file-based operation...
As for a temp file being easier than an unsaved one... the data needs to be created in either instance, either simple CSV or a coded population of Excel cells, so I don't quite see what is meant by that.
Refer Below code to open excel without saving
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=DateTime.Now + ".xls");
System.Web.HttpContext.Current.Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache); // If you want the option to open the Excel file without saving than
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Gridview1.RenderControl(htmlWrite);
//style to format numbers to string
string style = #"<style> .textmode { } </style>";
System.Web.HttpContext.Current.Response.Write(style);
System.Web.HttpContext.Current.Response.Output.Write(stringWrite.ToString());
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();

read/write a simple excel file using c#

I'm trying to find a simple way of writing an excel file in c#, but everything that I've found on thank you for your help.
You have two options available to you
The First is to use Interop Assemblies here is a link to some sample code on how to do that Write Data to Excel using C#
The Second option is to use OLEDB. There is some information on Stack Overflow on that here
Use epplus as mentioned above,It makes it really simple. This is the code for a spread sheet i created with it today.
using (ExcelPackage pck = new ExcelPackage())
{
//Give the worksheet a name
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Inventory as of " + DateTime.Now.ToString("MM/dd/yyyy"));
//dt is a datable that i am turning into an excel document
ws.Cells["A1"].LoadFromDataTable(dt, true);
//Format the header columns(Color,Pattern,etc.)
using (ExcelRange rng = ws.Cells["A1:AA1"])
{
rng.Style.Font.Bold = true;
rng.Style.Fill.PatternType = ExcelFillStyle.Solid; //Set Pattern for the background to Solid
rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189)); //Set color to dark blue
rng.Style.Font.Color.SetColor(Color.White);
}
//End Format the header columns
//Give the file details(ie. filename, etc.)
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=Inventory Report " + DateTime.Now.ToString("MM/dd/yyyy") + ".xlsx");
//Write the file
Response.BinaryWrite(pck.GetAsByteArray());
Response.End();
pck.Save();
}
what you would need is epplus, this will help you to create 2007+ excel file
not compatible with 2003 and under
There is no really easy way depending of the version of excel file you want to write. If you want to go for xls you won't have much options than using Excel interop which would also have the dependency to have Excel installed.
The newer version offers some more options as it is just XML in the background. You can choose yourself how to create it, either yourself, some libraries or again Interop.
If you just want to display a table without any styling, there was (afair) a way to write csv file and excel can open it quite well (depending on the data types you want to use in it).

How to make a real XLS file on asp.net c#?

I have this code to extract a table to computer in a .xls file:
// I have a string which contains HTML table codes, named as excelTable
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", String.Format("Attachment;Filename=file.xls", ));
response.Buffer = true;
response.ContentEncoding = System.Text.Encoding.Default;
response.ContentType = "application/vnd.ms-excel";
response.Write(excelTable);
response.End();
And I have seen that this is not a real .xls file. I can open it in Notepad and see my standart html table codes.
Now I understand that defining ContentType is not enough. So what else can I do to generate a pure .xls or .xlsx file? Or Should I certainly use Excel Libraries like OpenXML, Interop, etc. ?
Actual XLS/XLSX data must be sent back - that is, data generated with a library (e.g EEPlus) or other suitable source.
This common hack/approach works because Excel "knows how to read HTML". It doesn't actually turn the HTML into XSL/XLSX, although it can be saved as new spreadsheet once loaded by Excel.
Changing the content type will have no effect on the data, and instead will effectively stop this approach from working: the content type is used for associating the program (i.e. Excel) which will be used to open/read the data.
So yes: to generate a real XLS/XLSX document, use a library.

Export html report to excel

I have an html report having different sections like report header, report footer and the report data which needs to be exported to excel as it is. I am able to do this but the format of the report in excel is not proper. How can i make the format of the report as it is in the html report
i have used the following code to export html report with header and data to excel
Response.ContentType = "application/vnd.ms-excel";
string filename = "ECC_EMEA_" + String.Format("{0:dd_MMM_yy}", DateTime.Now.Date) + "_Summary.xls";
Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
string htmlString = sb.ToString();
for (int i = 0; i < dt.Columns.Count;i++ )
Response.Write("\t"); ;
Response.Write(htmlString);
Response.End();
ms office html rendering engine is really limited... if you want excel to display report in a proper format you have to build it only with supported html elements, css...
from my experience and from what i remember something like this is not supported (had a similar task to yours)
<table STYLE="background-image:url('url')">
you have to google to see what other limitations are and what elements, css properties are supported.
EDITED
here I have found a msdn link. Word 2007 HTML and CSS Rendering Capabilities in Outlook 2007. Excel html, css limitations will be quite similar to this.

MIME Types and exporting to different applications (excel, word , pdf ...etc etc)

i was wondering what really happen behind the scene when i write a file with mime type like this application/vnd.ms-excel
i mean i export to excel like this:
gridView.Page.Response.Clear();
gridView.Page.Response.Buffer = true;
gridView.Page.Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
gridView.Page.Response.Charset = "";
gridView.Page.Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
gridView.AllowPaging = false;
gridView.AllowSorting = false;
gridView.DataBind();
gridView.RenderControl(hw);
//style to format numbers to string
string style = #"<style> .textmode { mso-number-format:\#; } </style>";
gridView.Page.Response.Write(style);
gridView.Page.Response.Output.Write(sw.ToString());
gridView.Page.Response.Flush();
gridView.Page.Response.End();
i know excel files have specific format.so i was wondering how it gets done behind the scene ?
what i think of is it just generate HTML and paste it into EXCEL and its not really exporting to EXCEL format ?
can any one correct me if im wrong ? or tell me what really happens behind the scene ?
Nothing magical is happening - you are indeed just generating HTML; the MIME type is merely there to indicate which application should handle the data. The operating system and browser work together on that front, so when the browser sees a response with that MIME type, it opens Excel for you.
If instead of following whatever link might generate this request, you did a Right-Click-Save-As, you'd just end up with HTML in the file. It's not like ASP.NET is translating it into Excel's native format behind the scenes.
Just on a general note, if you're interested in seeing what goes on like this, you might want to run either Fiddler (a diagnostic proxy) or Wireshark (a network sniffer) - both will let you see what data is being exchanged between the browser and the server.

Categories

Resources