.net 导出excel 带图片
需要引入 NPOI包
导出excel: /// <summary> /// 导出excel /// </summary> /// <param name="dto"></param> /// <returns></returns> public FileStreamResult OutPutCustomerVisits(OutPutCustomerVisitsRequest dto) { var excelName = "导出的excel模板名"; var workbook = GetWorkbookFromResourceTemplate(excelName, false); var sheet = workbook.GetSheetAt(0); var datas = new List<object>()//要插入excel中的数据 var startRowIndex = 1; if (datas.Count > 10) sheet.CopyInsertRow(startRowIndex, datas.Count - 10); for (int e = 0; e < datas.Count; e++, startRowIndex++) { var data = datas[e]; sheet.SetCellValue(startRowIndex, 0, e + 1); //序号 sheet.SetCellValue(startRowIndex, 1, data.EnterpriseName); sheet.SetCellValue(startRowIndex, 2, data.InterviewRecordType); sheet.SetCellValue(startRowIndex, 3, data.Datetime); sheet.SetCellValue(startRowIndex, 4, data.RecordPerson); sheet.SetCellValue(startRowIndex, 5, data.RecordMember); sheet.SetCellValue(startRowIndex, 6, data.Record); if (data.Imgs.IsNotNullOrWhiteSpace()) AddPieChart(sheet, workbook, data.Imgs, startRowIndex, 7);//图片 } return ToFileResult(workbook, $"{excelName}.xlsx", dto.Password); } /// <summary> /// 添加图片到excel中 /// </summary> /// <param name="sheet"></param> /// <param name="workbook"></param> /// <param name="fileurl"></param> /// <param name="row"></param> /// <param name="col"></param> private void AddPieChart(ISheet sheet, IWorkbook workbook, string fileurl, int row, int col) { try {var res = ;//查服务器上或本地图片 byte[] bytes = Convert.FromBase64String(res.Data.ToString());//将图片转为byte[] if (!string.IsNullOrEmpty(fileurl)) { //类型 PictureType type = PictureType.JPEG; if (fileurl.IndexOf(".png") > -1) type = PictureType.PNG; else if (fileurl.IndexOf(".bmp") > -1) type = PictureType.BMP; int pictureIdx = workbook.AddPicture(bytes, type); // 创建绘图对象并设置图片位置和大小 IDrawing patriarch = sheet.CreateDrawingPatriarch(); IClientAnchor anchor = workbook.GetCreationHelper().CreateClientAnchor(); /* * dx1 dy1 起始单元格中的x,y坐标. * dx2 dy2 结束单元格中的x,y坐标 * col1,row1 指定起始的单元格,下标从0开始 * col2,row2 指定结束的单元格 ,下标从0开始 */ anchor.Col1 = col; // 图片所在列的起始位置 anchor.Row1 = row; // 图片所在行的起始位置 anchor.Col2 = col + 1; anchor.Row2 = row + 1; anchor.Dx1 = 0; anchor.Dy1 = 0; anchor.Dx2 = 10; anchor.Dy2 = 30; // 插入图片 IPicture picture = patriarch.CreatePicture(anchor, pictureIdx); } } catch (Exception ex) { } } /// <summary> /// 从资源模板中加载工作薄 /// </summary> /// <param name="resourceName">资源名称</param> /// <returns></returns> private IWorkbook GetWorkbookFromResourceTemplate(string resourceName) { using (Stream stream = new MemoryStream((byte[])Resource.ResourceManager.GetObject(resourceName, Resource.Culture))) { return stream.GetWorkbook(); } }
//导入excel public ResponseWrapper ImportCustomerVisits([FromForm] ImportFileDto dto) { if (dto == null) throw new FriendlyException("请求参数不能为空."); IWorkbook workbook = dto.File.OpenReadStream().GetWorkbook(); ISheet sheet = workbook.GetSheetAt(0); var table = sheet.ToDataTable(); for (int index = 0; index < table.Rows.Count; index++) { var row = table.Rows[index]; var name = row.GetRowCellValue("xx"); // 读取文件中的图片 var image = ImgList.Where(img => img.ClientAnchor.Row1 == index + 1)?.First(); var imgStr = ""; if (image != null) { byte[] pictureData = image.PictureData.Data; //图片类型 var imgType = image.PictureData.PictureType; var imgName = Guid.NewGuid() + ""; if (imgType == PictureType.PNG) imgName += ".png"; else if (imgType == PictureType.JPEG) imgName += ".jpeg"; else if (imgType == PictureType.BMP) imgName += ".bmp"; imgStr = UploadImageToBase64(pictureData, imgName); } _xxxRepository.InsertAsync(new xxxModel { }); } _xxxRepository.SaveChanges(); } /// <summary> /// 将excel中的图片上传到服务器 /// </summary> /// <param name="bytes"></param> /// <param name="fileName">图片名,必须加后缀</param> /// <param name="scope"></param> /// <returns></returns> private string UploadImageToBase64(byte[] bytes, string fileName, string scope = "") {var res = xxx;//上传图片操作return imgUrl;//服务器图片地址 }