Oracle导出Excel,两种方法比较
/// <summary> /// 普通方式 生成EXCEL /// </summary> /// <param name="dt">临时表</param> /// <param name="filePath">文件名 带路径</param> /// <param name="fileName">文件名</param> public void CreateExcel(DataTable dt, string filePath, string fileName) { Excel.Application excel1 = new Excel.Application(); excel1.DisplayAlerts = false; Excel.Workbook workbook1 = excel1.Workbooks.Add(Type.Missing); excel1.Visible = false; Excel.Worksheet worksheet1 = (Excel.Worksheet)workbook1.Worksheets["sheet1"]; //表头 worksheet1.Cells[1, 1] = "姓名"; //Excel里从第1行,第1列计算 worksheet1.Cells[1, 2] = "身份证号"; worksheet1.Cells[1, 3] = "发放类型"; worksheet1.Cells[1, 4] = "人员类型"; worksheet1.Cells[1, 5] = "发放金额"; worksheet1.Cells[1, 6] = "联系方式"; for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) worksheet1.Cells[i + 2, j + 1] = "‘" + dt.Rows[i][j].ToString(); } workbook1.SaveAs(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); excel1.Workbooks.Close(); excel1.Quit(); int generation = GC.GetGeneration(excel1); System.Runtime.InteropServices.Marshal.ReleaseComObject(excel1); excel1 = null; GC.Collect(generation); Relese(filePath, fileName); }
/// <summary> /// 从服务器端下载 /// </summary> /// <param name="filePath">服务器端 文件名 带路径</param> /// <param name="fileName">服务器端 文件名</param> private void Relese(string filePath, string fileName) //从服务器下载文件 { //打开要下载的文件,并把该文件存放在FileStream中 System.IO.FileStream Reader = System.IO.File.OpenRead(filePath); //文件传送的剩余字节数:初始值为文件的总大小 long Length = Reader.Length; HttpContext.Current.Response.Buffer = false; HttpContext.Current.Response.AddHeader("Connection", "Keep-Alive"); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); HttpContext.Current.Response.AddHeader("Content-Length", Length.ToString()); byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区 int ByteToRead; //每次实际读取的字节数 while (Length > 0) { //剩余字节数不为零,继续传送 if (Response.IsClientConnected) { //客户端浏览器还打开着,继续传送 ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据 HttpContext.Current.Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器 HttpContext.Current.Response.Flush(); //立即写入客户端 Length -= ByteToRead; //剩余字节数减少 } else { //客户端浏览器已经断开,阻止继续循环 Length = -1; } } //关闭该文件 Reader.Close(); if (System.IO.File.Exists(filePath)) { System.IO.File.Delete(filePath); } }
引用using CarlosAg.ExcelXmlWriter;大大提高了导出速度
#region 导出数据 public bool ExportResult(DataTable dt) { try { if (dt != null && dt.Rows.Count > 0) { dt.Columns["pername"].ColumnName = "姓名"; dt.Columns["percode"].ColumnName = "身份证号"; dt.Columns["applytype"].ColumnName = "发放类型"; dt.Columns["pertype"].ColumnName = "人员类型"; dt.Columns["appamt"].ColumnName = "申请金额"; dt.Columns["pertel"].ColumnName = "联系方式"; // string filename = MapPath(DateTime.Now.ToString("ddhhmmsss") + ".xls"); string filename = Server.MapPath("/") + "temp" + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; bool b = ImportExcel(filename, "申请信息表", 10000, dt); GC.Collect(); if (b) { System.IO.FileInfo info = new System.IO.FileInfo(filename); long fileSize = info.Length; System.IO.FileStream Reader = System.IO.File.OpenRead(filename); long Length = Reader.Length; HttpContext.Current.Response.Clear(); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("申请信息表" + DateTime.Now.ToString("yyyy-MM-dd-hhmmsss") + ".xls")); // Response.AddHeader("Content-Disposition", "attachment; filename="+filename); HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString()); byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区 int ByteToRead; //每次实际读取的字节数 while (Length > 0) { //剩余字节数不为零,继续传送 if (Response.IsClientConnected) { //客户端浏览器还打开着,继续传送 ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据 HttpContext.Current.Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器 HttpContext.Current.Response.Flush(); //立即写入客户端 Length -= ByteToRead; //剩余字节数减少 } else { //客户端浏览器已经断开,阻止继续循环 Length = -1; } } //关闭该文件 Reader.Close(); } if (System.IO.File.Exists(filename)) { System.IO.File.Delete(filename); } } return true; } catch (Exception ex) { //logger.Error("申请信息导出失败!", ex); return false; } finally { GC.Collect(); } } /// <summary> /// 导出Excel /// </summary> /// <param name="savePath">c:\\文件名.xls</param> /// <param name="sheetName">标签的名字</param> /// <param name="sheetCount">一个标签多少条</param> /// <param name="dt">数据集</param> /// <returns></returns> public static bool ImportExcel(string savePath, string sheetName, int sheetCount, System.Data.DataTable dt) { Workbook book = new Workbook(); Worksheet sheet = null;// book.Worksheets.Add("Sample"); WorksheetRow row = null; try { for (int i = 0; i < dt.Rows.Count; i++) { if (i % sheetCount == 0) { sheet = book.Worksheets.Add(sheetName + (i / sheetCount).ToString()); #region 生成列名 row = sheet.Table.Rows.Add(); for (int j = 0; j < dt.Columns.Count; j++) { // 第一行, 生成列名 row.Cells.Add(dt.Columns[j].ColumnName); } #endregion } row = sheet.Table.Rows.Add(); for (int k = 0; k < dt.Columns.Count; k++) { row.Cells.Add(dt.Rows[i][k].ToString()); } } book.Save(savePath); return true; } catch (Exception ex) { return false; } } #endregion
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。