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

        }
posted @ 2020-08-06 17:35  殷由页  阅读(269)  评论(0编辑  收藏  举报