C#将table导出到成excel文件
public void printAll(System.Data.DataTable dt) { //导出到execl try { //没有数据的话就不往下执行 if (dt.Rows.Count == 0) { } //实例化一个Excel.Application对象 // MessageBox.Show("当前没有数据!"); Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); if (excel == null) { //MessageBox.Show("无法创建Excel对象,可能未安装Excel"); return; } //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错 excel.Application.Workbooks.Add(true); //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写 excel.Visible = false; //生成Excel中列头名称 for (int i = 0; i < dt.Columns.Count; i++) { excel.Cells[1, i + 1] = dt.Columns[i].ColumnName;//输出DataGridView列头名 } //把DataGridView当前页的数据保存在Excel中 if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完 { for (int j = 0; j < dt.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完 { string str = dt.Rows[i][j].ToString(); excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制 } } } //设置禁止弹出保存和覆盖的询问提示框 excel.DisplayAlerts = false; excel.AlertBeforeOverwriting = false; //保存工作簿,值为false会报错 excel.Application.Workbooks.Add(true).Save(); //保存excel文件 excel.Save("D:" + "\\KKHMD.xls"); //确保Excel进程关闭 excel.Quit(); excel = null; } catch (Exception) { //KillProcess("EXCEL");//杀死进程EXCEL //int generation = System.GC.GetGeneration(excel); //excelApp = null; System.GC.Collect(); //MessageBox.Show(ex.Message, "错误提示"); } }
public static void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName) { if (tmpDataTable == null) return; int rowNum = tmpDataTable.Rows.Count; int columnNum = tmpDataTable.Columns.Count; int rowIndex = 1; int columnIndex = 0; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); xlApp.DefaultFilePath = ""; xlApp.DisplayAlerts = true; xlApp.SheetsInNewWorkbook = 1; Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true); //将DataTable的列名导入Excel表第一行 foreach (DataColumn dc in tmpDataTable.Columns) { columnIndex++; xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName; } //将DataTable中的数据导入Excel中 for (int i = 0; i < rowNum; i++) { rowIndex++; columnIndex = 0; for (int j = 0; j < columnNum; j++) { columnIndex++; xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString(); } } //xlBook.SaveCopyAs(HttpUtility.UrlDecode(strFileName, System.Text.Encoding.UTF8)); string dirname = Path.GetDirectoryName(strFileName); if (!Directory.Exists(dirname)) { Directory.CreateDirectory(dirname); } xlBook.SaveCopyAs(strFileName); }
让客户端保存文件代码
protected void responseHtml(string path) { FileInfo file = new FileInfo(path); string detail = ""; detail = file.Name + file.Length + file.IsReadOnly + file.FullName + file; Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name)); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 Response.AddHeader("Content-Length", file.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 //Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 Response.WriteFile(file.FullName); // 停止页面的执行 Response.End(); }