实现EXCEL导出添加图片加数据表格的功能(Echart+NPOI)

分享 未结 1 848
蒙奇奇萨马
悬赏:20飞吻
日前,因公司需求图表可以实现导出EXCEL功能,并且将数据表格明细导出,图表是Echarts实现,但是Echarts的配置文档只有导出图表图片的功能,所以只能自己写了,社区已经有大神实现了Excel导出Excel并可以自定义格式,大家可以看下:https://fly.layui.com/extend/excel/
但是没有实现插入图片的功能,所以我做了些修改,效果图如下:



实现思路:
1.获取Echarts图片,因为这个是base64格式,我们先要把这个转成图片保存在服务器绝对路径(假如图片已经在服务器就不需要这步了)
2.通过NPOI(很强大的开源项目,可以在没有安装Office的情况下对Excel文档进行读写操作)新建一个EXCEL,将指定数据写入EXCEL(此步上面那个拓展插件已经可以实现),然后通过POI将已经保存的图片插入指定位置,弄好之后就保存EXCEL在本地
3.返回本地EXCEL文件服务器路径
关键代码(主要通过后端实现.NET MVC开发)
NPOI插入图片
                string tempName = Guid.NewGuid().ToString().Substring(0, 10);

string FileName = decodeBase64ToImage(dataURL, path + dir, tempName);
//插入图片
byte[] bytes = System.IO.File.ReadAllBytes(FileName);
if (!string.IsNullOrEmpty(FileName))
{
int pictureIdx = book.AddPicture(bytes, NPOI.SS.UserModel.PictureType.PNG);
NPOI.HSSF.UserModel.HSSFPatriarch patriarch = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.CreateDrawingPatriarch();
NPOI.HSSF.UserModel.HSSFClientAnchor anchor = new NPOI.HSSF.UserModel.HSSFClientAnchor(255, 125, 1023, 150, 8, 0, 22, 37);
//##处理照片位置,【图片左上角为(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,宽为100,高为50

NPOI.HSSF.UserModel.HSSFPicture pict = (NPOI.HSSF.UserModel.HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);

//pict.Resize(); //图片原始大小来显示
}
}
存储EXCEL回传Link
           NPOI.HSSF.UserModel.HSSFWorkbook book = DoExport(ds1.Tables[0], ds2.Tables[0], dataURL, path);
string dir = DateTime.Now.ToString("yyyy-MM-dd");
if (!Directory.Exists(path + dir))
{
Directory.CreateDirectory(path + dir);
}

FileStream file = new FileStream(path+ dir +"\\"+ fileName, FileMode.Create);
book.Write(file);
file.Close();

// 返回下载路径
return "http://192.168.0.2:8176/Uploads/" + dir + "/" + fileName;
具体的实现步骤大概是这样,有什么问题,直接@
回帖
  • 这个应该是后端导出样例吧,前端的带图片导出我搜过,js-xlsx专业版可以做到,但是拿不到代码,也不能开源。
    0 回复