zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    魔兽登录系统
    航班信息查询预订
    第六章
    嵌套.
    嵌套
    Mysql
    第二章
    Java
    HTML-表格-列表-结构标记-表单
    HTML语言
  • 原文地址:https://www.cnblogs.com/tianshuilv/p/4081327.html
Copyright © 2011-2022 走看看