• NPOI生成不规则Excel表格(并以流的形式下载,不将文件保存在服务器上,直接在客户端导出excel)


    //下载NPOI类库并添加引用
    using NPOI.SS.UserModel;
    using NPOI.HSSF.UserModel;
    using NPOI.SS.Util;
    public static void MergeCell(ISheet tb, ICell cl, int firstrow, int lastrow, int firstcol, int lastcol, string name)
            {
                tb.AddMergedRegion(new CellRangeAddress(firstrow, lastrow, firstcol, lastcol));
                cl.SetCellValue(name);
    }
    
    
    public static ICellStyle SetCellStyle(IWorkbook wk, int number)
            {
                ICellStyle cellStyle = wk.CreateCellStyle();
                if (number == 0)//标题栏不设置边框样式
                {
                    //对齐  
                    cellStyle.VerticalAlignment = VerticalAlignment.CENTER;
                    cellStyle.Alignment = HorizontalAlignment.CENTER;
                    //自动换行  
                    cellStyle.WrapText = true;
                }
                else
                {
                    cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
                    cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
                    cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
                    cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
                    //对齐  
                    cellStyle.VerticalAlignment = VerticalAlignment.CENTER;
                    cellStyle.Alignment = HorizontalAlignment.CENTER;
                    //自动换行  
                    cellStyle.WrapText = true;
                }
                return cellStyle;
    }
    public static string ExportDLAnalyse2Excel(string excleTitle,string area)
            {
                string[] dlDataArr = area.Split(',');
                int rowlength = dlDataArr.Length / 3;//数据表格的行数
                //创建工作薄  
                HSSFWorkbook wk = new HSSFWorkbook();
                //创建一个名称为Sheet1的表  
                ISheet tb = wk.CreateSheet();
                wk.SetSheetName(0, "Sheet1");
                for (int i = 0; i < rowlength+2; i++)
                {
                    ICellStyle cellStyle = SetCellStyle(wk, i);
                    IRow row = tb.CreateRow(i);
                    for (int j = 0; j < 8; j++)//数据表格的列数
                    {
                        ICell cell = row.CreateCell(j);
                        cell.CellStyle = cellStyle;
                    }
    
                }
    
                MergeCell(tb, tb.GetRow(0).GetCell(2), 0, 0, 2, 5, excleTitle);//设置excel标题
                MergeCell(tb, tb.GetRow(1).GetCell(0), 1, 1, 0, 1, "编码");//设置表格标题栏
                MergeCell(tb, tb.GetRow(1).GetCell(2), 1, 1, 2, 5, "名称");
                MergeCell(tb, tb.GetRow(1).GetCell(6), 1, 1, 6, 7, "面积(/公顷)");
    
                int rownum = 2;
                for (int i = 0; i < dlDataArr.Length; i+=3)
                {
                    MergeCell(tb, tb.GetRow(rownum).GetCell(0), rownum, rownum, 0, 1, dlDataArr[i]);
                    MergeCell(tb, tb.GetRow(rownum).GetCell(2), rownum, rownum, 2, 5, dlDataArr[i + 1]);
                    MergeCell(tb, tb.GetRow(rownum).GetCell(6), rownum, rownum, 6, 7, dlDataArr[i + 2]);
                    rownum++;
                }
    
                MemoryStream mstream = new MemoryStream();
                wk.Write(mstream);
                DownloadFile(mstream, excleTitle, "xls");
                return null;
    }
     
    /// <summary>
    /// 从服务器下载Excel到客户端
    /// </summary>
    /// <param name="fs"></param>
    /// <param name="filename"></param>
    /// <returns></returns>
    public static string DownloadFile(MemoryStream fs, string filename,string extenname)
            {
                string fileName = filename + "."+extenname;//客户端保存的文件名 
    
                //以字符流的形式下载文件 
                byte[] bytes = fs.ToArray();
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.ClearContent();
                System.Web.HttpContext.Current.Response.ClearHeaders();
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                //通知浏览器下载文件而不是打开 
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                System.Web.HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
                System.Web.HttpContext.Current.Response.BinaryWrite(bytes);
                System.Web.HttpContext.Current.Response.Flush();
                System.Web.HttpContext.Current.Response.End();
                return null;
    }
    多看一行书,就少写一行代码,记录点滴,用心生活。
  • 相关阅读:
    va_list/va_start/va_arg/va_end深入分析【转】
    Linux Kernel中断子系统来龙去脉浅析【转】
    Linux系统调用---同步IO: sync、fsync与fdatasync【转】
    Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义【转】
    linux下的module_param()解释【转】
    Makefile 使用总结【转】
    FLASH的知识【转】
    Linux MTD系统剖析【转】
    linux的mtd架构分析【转】
    linux设备树笔记__dts基本概念及语法【转】
  • 原文地址:https://www.cnblogs.com/aegisada/p/3673467.html
Copyright © 2020-2023  润新知