还是想问下,勤 哲Excel服务器数据通过网页将文件导入云服务器和导出功能有没有?


今天来讲下在导入数据的场景时,表格中会有一列存放的是对应的图片信息,导入后在前端页面进行表格数据展示
这里的难点主要在于,对于获取表格中图片列的图片数据进行保存到服务器以及对应插入数据库,建议一般是用图片的保存服务器的路径地址保存到数据库中,或者通过封装一个附件VO类,有id属性与路径属性,保存id属性到数据库中也是可以的。一、导入带有图片,解析图片,将图片保存至服务器下面简单的梳理下,对于获取图片的核心方法逻辑,代码如下:/**
*excel数据处理导入
*@param
文件路径
excel对应的具体sheet名称
*/
public void getExcelData(String filePath,String sheetName) throws IOException{
Workbook workbook = null;
Sheet sheet = null;
//创建一个绝对地址的流,try-with-resource自动关闭fis资源的写法
try(FileInputStream fis = new FileInputStream(filePath)){
//创建工作簿
workbook = new XSSFWorkbook(fis);
//区分excle不同子sheet
sheet = workbook.getSheet(sheetName);
//获取图片
getPictures((XSSFSheet)sheet,sheetName);
}catch(IOException e){
e.printStackTrace();
}
}
/**
*获取图片和位置
*/
public void getPictures(XSSFSheet sheet,String sheetName) throws IOException{
List<POIXMLDocumentPart> list = sheet.getRelations();
for(POIXMLDocumentPart part : list){
//if中获取图片并处理对应行数据
if(part instanceof XSSFDrawing){
XSSFDrawing drawing = (XSSFDrawing) part;
List<XSSFShape> shapes = drawing.getShapes();
//按顺序获取当前sheet的全部图片
for(XSSFDrawing shape : shapes){
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
CTMarker marker = anchor.getFrom();
//将sheet名称,图片的行数列数拼接
String key = sheetName + "-" +marker.getRow() + "-" + marker.getCol();
PictureData pic = picture.getPictureData(); //获取图片流
String ext = pic.suggestFileExtension(); //获取图片格式
String picName = System.currentTimeMillis() + "" + key + "." + ext; //定义图片名称
byte[] data = pic.getData(); //获取图片数据
FileOutputStream out = new FileOutputStream("D:\\img\\pic" + picName); //设置图片保存的路径,先创建好文件
out.write(data);
out.close();
}
}
}
}二、导出带有图片,解析图片,将图片保存至Excel表格/**设置图表到要导出表格中的知道列位置
*@param 图片的存储路径;自定义的工作簿;自定义的工作簿的sheet表;行数;列数 一般列数就是固定的某一列或多列,自定义
*/
public void setPicture(String filePath,XSSFWorkbook workbook,XSSFSheet sheet,int row,int cell){
//先把读到内存的图片放到一个流中,以便产生ByteArray进行创建图片
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try{
BufferedImage bufferedImage = ImageIO.read(new File(filePath));
ImageIO.write(bufferedImage,"png",byteArrayOutputStream);
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
//设置图片位置,若表格导出没有图片显示,则可看看是否这个位置坐标需要调整
XSSFClientAnchor anchor = new XSSFClinetAnchor(0,0,0,0,cell,row,cell++,row+1);
//设置图片相对于单元格比例
XSSFPicture picture = patriach.createPicture(anchor,workbook,addPicture(byteArrayOutputStream.toByteArray(),XSSFWorkbook.PICTURE_TYPE_JPEG));
//若一个单元格有多张图片,图片比例最后也需要再调整
picture.resize(1.01,1);
}catch(IOException e){
e.printStackTrace();
}
}总结一下,这里重点是提炼了POI表格导入导出时涉及的图片解析的核心代码,可根据业务实际场景需求进行灵活处理。
}

我要回帖

更多关于 EXCEL服务器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信