基于反射的Excel动态上传下载
来源:互联网 发布:达内java培训机构 编辑:程序博客网 时间:2024/06/05 18:03
package org.gyy.service.excel;import java.io.File;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import org.gyy.dao.Excel;import jxl.Cell;import jxl.CellType;import jxl.Sheet;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class ExcelService {public static void creatExcel(List<?> list,String[] heards){ try { WritableWorkbook wwb = null; // 创建可写入的Excel工作簿 String fileName = "F://book.xls"; File file=new File(fileName); if (!file.exists()) { file.createNewFile(); } //以fileName为文件名来创建一个Workbook wwb = Workbook.createWorkbook(file); // 创建工作表 WritableSheet ws = wwb.createSheet("Sheet1", 0); //要插入到的Excel表格的行号,默认从0开始 for (int i = 0; i < heards.length; i++) { Label labelId= new Label(i, 0, heards[i]);//表示第 ws.addCell(labelId);} for (int i = 0; i < list.size(); i++) { Object obj = list.get(i); Class<? extends Object> cl = obj.getClass(); Field[] fields = cl.getDeclaredFields(); for (int j = 0; j < fields.length; j++) {fields[j].setAccessible(true);Label label= new Label(j, i+1, String.valueOf(fields[j].get(obj)));ws.addCell(label);} } //写进文档 wwb.write(); // 关闭Excel工作簿对象 wwb.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 查询指定目录中电子表格中所有的数据 * @param file 文件完整路径 * @return */ public static List getAllByExcel(String file,Object obj){ List list=new ArrayList(); try { Workbook rwb=Workbook.getWorkbook(new File(file)); Sheet rs=rwb.getSheet(0);//或者rwb.getSheet(0) int clos=rs.getColumns();//得到所有的列 // int rows=rs.getRows();//得到所有的行 int rows = rows(file); System.out.println(clos+" rows:"+rows); for (int i = 1; i < rows; i++) { for (int j = 0; j < clos; j++) { Object instance = obj.getClass().newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (int k = 0; k < fields.length; k++) { String name = fields[k].getName(); // 获取属性的名字 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法 String type = fields[k].getGenericType().toString(); // 获取属性的类型 if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名 String id=rs.getCell(j++, i).getContents();//默认最左边编号也算一列 所以这里得j++ fields[k].setAccessible(true); fields[k].set(instance, id);//给对象设置值 }} list.add(instance); //list.add(new Excel(id, name, sex, num)); break; } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } //得到实际行数,除掉标题 private static int rows(String file){ int row=0; try { Workbook rwb=Workbook.getWorkbook(new File(file)); Sheet rs=rwb.getSheet(0);//或者rwb.getSheet(0) int clos=rs.getColumns();//得到所有的列 int rows=rs.getRows();//得到所有的行 for (int i = 1; i < rows; i++) { for (int j = 0; j < clos; j++) { //第一个是列数,第二个是行数 Cell cell = rs.getCell(j, i);//默认最左边编号也算一列 所以这里得j++ CellType cellType = cell.getType(); if (cellType != CellType.EMPTY) { row+=1; break; } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } public static void main(String[] args) {List<Excel> allByExcel = getAllByExcel("F://test.xls",new Excel());for (Excel excel : allByExcel) {System.out.println(excel);}String[] heards = {"id","name","sex","num"};creatExcel(allByExcel,heards);}}
heards是标题
如果公司数据库返回数据使用的List<Map<String, Object>> list格式可以使用这个代码生成excel,自动设置标题,内容
public static void creatExcel(List<Map<String, Object>> list,String fileName){ try { WritableWorkbook wwb = null; // 创建可写入的Excel工作簿 File file=new File(fileName); if (!file.exists()) { file.createNewFile(); } //以fileName为文件名来创建一个Workbook wwb = Workbook.createWorkbook(file); ArrayList<Object> arrayList = new ArrayList<>(); int k = 0; // 创建工作表 WritableSheet ws = wwb.createSheet("Sheet1", 0); if (CollectionUtils.isNotEmpty(list)) {if (MapUtils.isNotEmpty(list.get(0))) {Map<String, Object> map = list.get(0);Set<String> keySet = map.keySet();for (String string : keySet) {arrayList.add(string);Label labelId= new Label(k++, 0,string);//设置标题ws.addCell(labelId);}for (int i = 0; i < list.size(); i++) {Map<String, Object> mapdata = list.get(i);for (int j = 0; j < arrayList.size(); j++) {Label label= new Label(j, i+1,String.valueOf(mapdata.get(arrayList.get(j))) );//设置内容ws.addCell(label);}}}} //写进文档 wwb.write(); // 关闭Excel工作簿对象 wwb.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
阅读全文
0 0
- 基于反射的Excel动态上传下载
- java基于反射机制动态导出excel
- 基于Spring Mvc实现的Excel文件上传下载
- Excel的上传下载
- Excel的上传下载
- JAVA 基于反射的动态代理
- 基于Delphi的Excel动态报表技术
- 基于Delphi的Excel动态报表技术
- 基于反射实现通用的Excel读取文件
- 基于cordova插件的上传下载
- 基于struts2的文件上传下载
- java反射之基于JDK的动态代理的乐子
- 计算机作品大赛一等奖——基于上传下载模块的动态网站设计
- excel上传下载
- java反射(二)-基于反射和注解的Excel解析工具Demo
- Java上传下载excel、解析Excel、生成Excel的问题
- Java上传下载excel、解析Excel、生成Excel的问题
- Java上传下载excel、解析Excel、生成Excel的问题
- 基于jquery.jsPlumb编写拓扑图
- Ubuntu1404+caffe+cuda8.0 gpu1080安装
- Hive 2、Hive 的安装配置(本地MySql模式)
- ADB shell 常见错误
- JAVA解析JSON
- 基于反射的Excel动态上传下载
- zookeeper-端口说明
- SQL练习题,MySQL数据库查询语句经典例题练习,附带答案和运行效果截图以供参考
- Hive 3、Hive 的安装配置(本地derby模式)
- (二)JNI学习之C语言基础,控制语句
- TCP MCC and MTU and PMTU
- Android自动化测试学习路线
- idea注册码
- 代码走读之 硬件时间戳