zoukankan      html  css  js  c++  java
  • .Net使用NPOI实现在Excel第一行插入文字

    产品提出新需求,要在用户所有上传的订单附件中的最前方加入订单号,本以为是小需求,结果确意外的踩了不少坑,下面说一下我踩坑的全部过程:

    1.使用CreateRow创建行

    最开始的预期是CreateRow(0)就可以完全实现这个小需求了,结果没想到的是,我们的需求是创建新行的同时,其他所有内容下移,CreateRow只能在所在位置创建行,如果该行有内容,将被替换。

    2.使用CopyRow复制行再编辑

    理想很丰满,显示却很骨感,复制是复制下来了,但是如果第一行是两行合并的话,那就复制了个寂寞,依然会把第一行替换掉。

    3.使用ShiftRows移动

    ShiftRows方法可以将当前行下移,之前考虑不周,只移动一行,发现会把下一行覆盖就pass了,结果走投无路后回想起来才发现自己是多么的愚蠢。将整个表格的内容全部下移不就可以了吗,最后操作下来证明这个思路是可行的。

    ShiftRows参数说明:

    startRow开始行

    endRow结束行

    n下移的行数

    copyRowHeight复制行高 (感觉不好用)

    resetOriginalRowHeight重置行高

            /// <summary>
            /// 向Excel插入行
            /// </summary>
            /// <param name="filePath">文件绝对路径</param>
            /// <param name="content">插入内容</param>
            public void AddHeadInfo(string filePath, string content)
            {
                string fileExt = Path.GetExtension(filePath).ToLower();//获取扩展名
                IWorkbook workbook;  
    
                    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
                        if (workbook == null) { return; }
                        ISheet sheet = workbook.GetSheetAt(0);
                        //将表格内容整体下移
                        sheet.ShiftRows(0, sheet.LastRowNum, 1);
                        var newrow = sheet.CreateRow(0);
                        newrow.CreateCell(0);
                        newrow.Cells[0].SetCellValue(content);
    
                        IFont font = workbook.CreateFont();//创建字体样式
                        font.Color = HSSFColor.Red.Index;//设置字体颜色
                        if (fileExt == ".xlsx")
                        {
                            newrow.HeightInPoints = 20;
                            font.FontHeight = 14;
                        }
                        else
                        {
                            newrow.HeightInPoints = 20;
                            font.FontHeight = 280;
                        }
                        ICellStyle style = workbook.CreateCellStyle();//创建单元格样式
    
                        style.SetFont(font);//设置单元格样式中的字体样式
                        newrow.Cells[0].CellStyle = style;//为单元格设置显示样式 
                        FileStream out2 = new FileStream(filePath, FileMode.Create);
                        workbook.Write(out2);
                        out2.Close();
                    }
    
            }
    
  • 相关阅读:
    list接口如何使用
    分页导航jsp
    jstl遍历list的jsp
    sql分页查询
    sql计算总页数
    类和对象,类定义了对象的特征和行为。属性,方法。
    编写一个带有main函数的类,调用上面的汽车类,实例化奔驰、大众、丰田等不同品牌和型号,模拟开车过程:启动、加速、转弯、刹车、息火,实时显示速度。
    java编写一个汽车类,有属性:品牌、型号、排量、速度,有方法:启动、加速、转弯、刹车、息火
    jenkins 集成 pytest + allure
    jenkins环境安装(windows)
  • 原文地址:https://www.cnblogs.com/yindi0712/p/13447726.html
Copyright © 2011-2022 走看看