I want to save excel file which export data of grid view. I have written code to export gridview data to excel but I don\'t know how to save exported file.
Following
public partial class exportgridtoexcel : System.Web.UI.Page
{
SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString.ToString());
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetData();
}
}
public void GetData()
{
SqlDataAdapter sda = new SqlDataAdapter("select * from EmpData", con);
DataTable dt = new DataTable();
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void btnDownload_Click(object sender, EventArgs e)
{
GetData();
exporttoexcel("Report.xls", GridView1);
GridView1 = null;
GridView1.Dispose();
}
public void exporttoexcel(string filename,GridView gv)
{
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment;filename=" + filename);
Response.ContentType = "applicatio/excel";
StringWriter sw = new StringWriter(); ;
HtmlTextWriter htm=new HtmlTextWriter(sw);
gv.RenderControl(htm);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
}
}
Folowed the link: C# Excel file OLEDB read HTML IMPORT
Use the Extended Properties=\"HTML Import;HDR=No;IMEX=1 the select * from [tablename]
,
tablename is returned from GetOleDbSchemaTable
.
Note: This would not load the normal excel. For that use Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\
, where table name will be with $
sign.
Check sample code: Can't read excel file after creating it using File.WriteAllText() function
One another solution for this problem solved here : http://codentq.wordpress.com/2014/02/13/write-excel-file-from-dataset/
you have to get your grid view data in data set by method mention on this article : http://codentq.wordpress.com/2014/02/13/get-data-from-grid-to-datatable-or-dataset/
first add EPPLUS reference library into application and add using OfficeOpenXml;
//business object class
class bocls {
string name;
public string NAME
{
get { return name; }
set { name = value; }
}
string id;
public string ID
{
get { return id; }
set { id = value; }
}
public bocls() { }
public bocls(string name, string id)
{
this.name = name;
this.id = id;
}
//in export button click event
protected void lbtnExport_Click(object sender, EventArgs e) {
List<bocls> list6 = new List<bocls>();
//copy the grid view values into list
list6 = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
from cell in row.Cells.Cast<DataGridViewCell>()
select new
{
//project into your new class from the row and cell vars.
}).ToList();
}
ExcelPackage excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("Products");
var totalCols = GridView1.Rows[0].Cells.Count;
var totalRows = GridView1.Rows.Count;
var headerRow = GridView1.HeaderRow;
for (var i = 1; i <= totalCols; i++)
{
workSheet.Cells[1, i].Value = headerRow.Cells[i - 1].Text;
}
for (var j = 1; j <= totalRows; j++)
{
for (var i = 1; i <= totalCols; i++)
{
var item = list6.ElementAt(j - 1);
workSheet.Column(1).Width = 13;
workSheet.Column(2).Width = 10;
workSheet.Cells[j + 1, i].Style.WrapText = true;
if (headerRow.Cells[i - 1].Text == "ID")
workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("id").GetValue(item, null);
else if (headerRow.Cells[i - 1].Text == "NAME")
workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("name").GetValue(item, null);
workSheet.Cells[j + 1, i].Value = workSheet.Cells[j + 1, i].Value.ToString().Replace("<br/>", "");
}
}
using (var memoryStream = new MemoryStream())
{
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
string filename = Guid.NewGuid().ToString() + ".xlsx";
Response.AddHeader("content-disposition", "attachment; filename=" + filename);
excel.SaveAs(memoryStream);
//add your destination folder
FileStream fileStream = new FileStream(@"C:\Users\karthi\Downloads\New folder\" + filename, FileMode.Create,FileAccess.Write,FileShare.Write);
memoryStream.WriteTo(fileStream);
fileStream.Close();
memoryStream.WriteTo(Response.OutputStream);
memoryStream.Close();
memoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
You're asking how to save the exported file... Your code puts the rendered contents of the gridview (HTML) into the Response. In this case your browser (client-side) will receive this response and pops-up a dialog asking where to save it. So your browser will save the file for you.
If you want to save it server side you must not put the rendered gridview into the response. Write it to a file on the local hard disc instead (like the answer above shows).
Remember that, in an environment other than your own development machine (i.e. a production environment), the ASP.NET worker process might not have enough access rights to write to the specified location on the hard disc. Here are a couple of answers that adresses that problem:
ASP.net user account permissions
ASP.NET + Access to the path is denied
System.UnauthorizedAccessException: Access to the path is denied
this may help you//
protected void exporttoexcel_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" attachment" + ".xls");
Response.Charset = "";
// If you want the option to open the Excel file without saving than
// comment out the line below
// Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);
GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for the
//specified ASP.NET server control at run time.
}