• 使用npoi插件将excel文件导出


    大致流程:前端使用URL地址的方式跳转到action后返回file类型数据

    js:

     window.location.href = '/Home/index?Id=' + id

     后台代码:

    /// <summary>
            /// 导出对比结果
            /// </summary>
            /// <param name="quarter"></param>
            /// <returns></returns>
            public FileResult index(int Id)
            {
                try
                {
                    var list = 可以根据传入参数查找到数据库中需要导出的数据列表
    
                    //创建Excel文件的对象
                    NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                    //创建样式
                    var style = book.CreateCellStyle();
                    //单元格样式:水平对齐居中
                    style.Alignment = HorizontalAlignment.Center;
                    //字体样式
                    var font=book.CreateFont();
                    //加粗
                    font.Boldweight=short.MaxValue;
                    //字体样式加入到单元格样式里面
                    style.SetFont(font);
    
                    //添加一个sheet
                    NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
                    var titleCell = sheet1.AddMergedRegion(new CellRangeAddress(0, 2, 0, 3));
                    var row = sheet1.CreateRow(0);
                    row.CreateCell(0).SetCellValue("签到标题:" + title + " 反馈进度:" + feedBackProgress);
                    //标题的样式设置
                    row.CreateCell(0).CellStyle = style;
                    //给sheet1添加第一行的头部标题
                    NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(3);
    
                    row1.CreateCell(0).SetCellValue("姓名");
                    row1.CreateCell(1).SetCellValue("性别");
                    row1.CreateCell(2).SetCellValue("年龄");
                    //将数据逐步写入sheet1各个行
    
                    for (int i = 0; i < list.Count; i++)
                    {
                        NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 4);
                        rowtemp.CreateCell(0).SetCellValue(list[i].name);
                        rowtemp.CreateCell(1).SetCellValue(list[i].sex);//如果是时间字段需要tostring确定格式,否则导出到数据库的时候会变成一个小数的数字
                        rowtemp.CreateCell(2).SetCellValue(list[i].age);
                    }
                    // 写入到客户端 
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    book.Write(ms);
                    ms.Seek(0, SeekOrigin.Begin);
                    return File(ms, "application/vnd.ms-excel", string.Format("你的excel-{0}.xls", DateTime.Now.ToString("yyyyMMddhhmmss")));
                }
                catch (Exception ex)
                {
                    logger.Error(ex.Message + ex.StackTrace);
                    return null;
                }
            }

     上述代码存在一个错误,就是导出的excel合并行的标题不见了,经过研究发现,要写成如下形式:

    //添加一个sheet
                    ISheet sheet1 = book.CreateSheet("Sheet1");
                    sheet1.AddMergedRegion(new CellRangeAddress(0, 2, 0, 3));
                    
                    var row = sheet1.CreateRow(0);
                    //标题的样式设置
                    var titleRow = row.CreateCell(0);
                    //创建样式
                    var style = book.CreateCellStyle();
                    //单元格样式:水平对齐居中
                    style.Alignment = HorizontalAlignment.Center;
                    //字体样式
                    var font = book.CreateFont();
                    //加粗
                    font.Boldweight = short.MaxValue;
                    //字体样式加入到单元格样式里面
                    style.SetFont(font);
                    titleRow.CellStyle = style;
                    row.CreateCell(0).CellStyle = style;
                    titleRow.SetCellValue("签到标题:" + title + " 反馈进度:" + feedBackProgress);

    这里首先是

    row.CreateCell(0)在设置的时候要统一用一个变量去设置,第二点就是
              titleRow.CellStyle = style;
              row.CreateCell(0).CellStyle = style;
    先设置样式。再设置值,如果顺序颠倒也会出现比如字体不对或者不显示的问题.
    另外,合并单元格方法的四个参数解释如下:
    //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
     
  • 相关阅读:
    Linux下安装confluence汉化破解版
    某种可以解决一切问题的方法
    普通平衡树(treap)
    文艺平衡树(splay模板)
    [CQOI2015]任务查询系统
    [NOIP2016]天天爱跑步
    NOI2018_Day1_T1_归程
    Picture
    bzoj3524 Couriers
    bzoj2588 counting on a tree
  • 原文地址:https://www.cnblogs.com/llcdbk/p/10578740.html
Copyright © 2020-2023  润新知