使用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();
                }

        }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值