用jxl导出带图片的excle
来源:互联网 发布:sql express安装 编辑:程序博客网 时间:2024/05/22 02:12
* 下载列表为excel(带图片)
* @param ex 实体类
* @param headers excel里的标题行
* @param dataset 列表数据
* * @param title 标题
* @param x 图片所在列
* @return 下载好的文件名
*/
public String downLoadExcelWithPicture(ExportExcel<T> ex,String[] headers,List<T> dataset,String title,int x)
{
//通过配置文件获取路径
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("application.properties");long now=System.currentTimeMillis();
java.util.Random random=new java.util.Random();// 定义随机类
int result=random.nextInt(100);// 返回[0,10)集合中的整数,注意不包括10
//生成随机名称
String name=""+now+result;
Properties p = new Properties();
try{
p.load(inputStream);
} catch (IOException e1){
e1.printStackTrace();
}
//获取路径
String path=p.getProperty("DOWNLOAD_PATH");try{
//打开文件
WritableWorkbook book = Workbook.createWorkbook( new File( path+name+".xls" ));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet(title,0);
//设定单元格高度与宽度 设定第一行高度500 设定第一列宽度30
sheet.setRowView(0, 500);
sheet.setColumnView(x, 30);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
//Label()方法三个参数 1:列数 2:行数 3:要写入的内容 4:样式(可选项)
//添加表格头
for(int i=0;i<headers.length;i++){
Label label = new Label(i,0,headers[i]);
//将定义好的单元格添加到工作表中
sheet.addCell(label);
}
//添加内容
//循环得到行数
for(int i=0;i<dataset.size();i++){
Object data= dataset.get(i);
int k=0;//初始列
//获取类的所有属性
Field[] field = data.getClass().getDeclaredFields();for (int j = 0; j < field.length; j++) {
// 获取属性的名字
String na = field[j].getName();
// 将属性的首字符大写,方便构造get,set方法
na = na.substring(0, 1).toUpperCase() + na.substring(1);
Method m = data.getClass().getMethod("get" + na);
String value = (String) m.invoke(data);
if(k==x){
String imgPath = path+value;
//将图片的格式转换成png(因为jxl目前只支持png格式)
if(imgPath.indexOf(".png")==-1 && value!=null){
String changePath=imgPath.substring(0,imgPath.indexOf("."))+".png";
boolean flag=narrowAndFormateTransfer(imgPath,changePath,400,400,"png");
if(flag){
imgPath=changePath;
}else{
imgPath=null;
}
}
File imgFile = new File(imgPath);
WritableImage image = new WritableImage(k,i+1,1,1,imgFile);
sheet.addImage(image);
sheet.setRowView(i+1, 2000);
k++;
}else{
Label label = new Label(k,i+1,value);
///将定义好的单元格添加到工作表中
sheet.addCell(label);
k++;
}
}
}
//写入数据并关闭文件
book.write();
book.close();
return name+".xls";
} catch (Exception e) {
System.out.println(e);
return null;
}
}
/**
* 将图片格式转换
* @param srcPath
* @param destPath
* @param height
* @param width
* @param formate
* @return
*/
public boolean narrowAndFormateTransfer(String srcPath, String destPath, int height, int width, String formate) {
boolean flag = false;
try {
File file = new File(srcPath);
File destFile = new File(destPath);
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdir();
}
BufferedImage src = ImageIO.read(file); // 读入文件
Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
flag = ImageIO.write(tag, formate, new FileOutputStream(destFile));// 输出到文件流
} catch (IOException e) {
e.printStackTrace();
}
return flag;
}
- 用jxl导出带图片的excle
- jxl 导出excle整理
- Android 数据导出之Excle jxl.jar
- Android 数据导出之Excle jxl.jar
- jxl导出图片
- JXL(JExcleApi)Excle详细使用心得 Java导出Excel
- Java带样式导出excle(poi)
- jxl导出图片到excel
- excel导出带图片的导出功能
- JXL 读写excle
- JXL处理excle
- Excle导出
- 导出EXCLE
- excle导出
- 导出excle
- excle导出
- excle导出
- 使用jxl生成Excle文件的代码总结
- 求幂运算的不同发法之间的时间复杂度比较
- Android实战技巧:使用原始资源文件
- 苹果智能音箱来了,但它有个奇怪的名字:HomePod
- 说说 JavaScript 的事件处理程序
- mpeg2音频失真问题
- 用jxl导出带图片的excle
- 比赛
- 2、测试
- Nginx文件配置
- gdb调试多进程多线程
- hdu1283
- 火狐、Safari的js用javascript:void(0);依然执行跳转的bug
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
- Python3 Django 连接 Mysql 数据库