将网格视图导出为Excel并将Excel文件保存到文件夹

我想保存导出网格视图数据的excel文件。 我已编写代码将gridview数据导出到excel但我不知道如何保存导出的文件。

以下是我将gridview导出到excel的代码:

Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls"); Response.Charset = ""; this.EnableViewState = false; System.IO.StringWriter sw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); gvFiles.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); 

你可以这样做:

 private void ExportGridView() { System.IO.StringWriter sw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); // Render grid view control. gvFiles.RenderControl(htw); // Write the rendered content to a file. string renderedGridView = sw.ToString(); System.IO.File.WriteAllText(@"C:\Path\On\Server\ExportedFile.xlsx", renderedGridView); } 

这可能对你有帮助//

 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. } 
 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) { } } 

}

您正在询问如何保存导出的文件…您的代码将gridview(HTML)的呈现内容放入Response中。 在这种情况下,您的浏览器(客户端)将收到此响应并弹出一个对话框,询问保存位置。 因此,您的浏览器将为您保存文件。

如果要保存服务器端,则不得将呈现的gridview放入响应中。 将其写入本地硬盘上的文件(如上面的答案所示)。

请记住,在您自己的开发机器(即生产环境)以外的环境中,ASP.NET辅助进程可能没有足够的访问权限来写入硬盘上的指定位置。 以下是一些解决该问题的答案:

ASP.net用户帐户权限
ASP.NET +拒绝访问路径
System.UnauthorizedAccessException:拒绝访问该路径

链接: C#Excel文件OLEDB读取HTML IMPORT

使用Extended Properties=\"HTML Import;HDR=No;IMEX=1 the select * from [tablename] ,tablename从GetOleDbSchemaTable返回。

注意:这不会加载正常的Excel。 为此,使用Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\ ,其中表名将带有$符号。

检查示例代码: 使用File.WriteAllText()函数创建后无法读取excel文件

这个问题的另一个解决方案在这里得到解决: http : //codentq.wordpress.com/2014/02/13/write-excel-file-from-dataset/

您必须通过本文提到的方法获取数据集中的网格视图数据: http : //codentq.wordpress.com/2014/02/13/get-data-from-grid-to-datatable-or-dataset/

首先将EPPLUS参考库添加到应用程序中并使用OfficeOpenXml添加;

//业务对象类

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; } 

//在导出按钮单击事件中

protected void lbtnExport_Click(object sender,EventArgs e){

  List list6 = new List(); //copy the grid view values into list list6 = (from row in dataGridView1.Rows.Cast() from cell in row.Cells.Cast() 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("
", ""); } } 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(); } }