使用NPOI core插入图片

闲的无聊,封装一个NPOI core插入图片,下面贴上代码,有注释,我就不讲解了

    public class ExcelHelper
    {
        /// <summary>
        /// excel插入图片
        /// </summary>
        /// <param name="excelPath">excel路径</param>
        /// <param name="imgStream">图片流</param>
        /// <param name="rowNumber">图片插入到哪行</param>
        /// <param name="pictureType">图片类型</param>
        /// <param name="cellNumber">图片插入到那列</param>
        /// <param name="height">图片所在的那行的高度</param>
        /// <param name="sheelNumber">哪个sheel,默认为第一个</param>
        public static void InsertImage(string excelPath, Stream imgStream, PictureType pictureType, int rowNumber, int cellNumber, short height, int sheelNumber = 0)
        {
            if (!File.Exists(excelPath))
            {
                throw new Exception($"file path:'{excelPath}' does not exists.");
            }
            using (Stream excelStream = new FileStream(excelPath, FileMode.Open))
            {
                IWorkbook workbook = WorkbookFactory.Create(excelStream);
                ///判断sheet是否存在
                ISheet sheet = workbook.GetSheetAt(sheelNumber);
                if (sheet == null)
                {
                    sheet = workbook.CreateSheet($"sheet{sheelNumber}");
                }
                ///判断行是否存在
                IRow row = sheet.GetRow(rowNumber);
                if (row == null)
                {
                    row = sheet.CreateRow(rowNumber);
                }
                //设置行高
                row.Height = height;
                ///判断列是否存在
                ICell cell = row.GetCell(cellNumber);
                if (cell == null)
                {
                    cell = row.CreateCell(cellNumber);
                }
                //将图片流读取到byte数组
                byte[] bytes = new byte[imgStream.Length];
                imgStream.Read(bytes, 0, (int)imgStream.Length);

                int pictureIdx = workbook.AddPicture(bytes, pictureType);
                IDrawing patriarch = sheet.CreateDrawingPatriarch();
                //指定图片插入的位置
                IClientAnchor anchor = new XSSFClientAnchor(0, 10, 0, 0, cellNumber, rowNumber, cellNumber + 1, rowNumber + 1);
                string extension = Path.GetExtension(excelPath);
                if (extension == ".xls")
                {
                    anchor = new HSSFClientAnchor(0, 10, 0, 0, cellNumber, rowNumber, cellNumber+1, rowNumber + 1);
                }

                IPicture pict = patriarch.CreatePicture(anchor, pictureIdx);


                using (Stream stream = File.OpenWrite(excelPath))
                {
                    workbook.Write(stream);
                }

            }
        }
    }

  

原文地址:https://www.cnblogs.com/norain/p/11119412.html