java项目中Excel文件的导入导出
来源:互联网 发布:郑州seo外包公司 编辑:程序博客网 时间:2024/05/17 17:55
1 package poi.excel; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.lang.reflect.Field; 7 import java.lang.reflect.Method; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import javax.servlet.http.HttpServletRequest; 12 13 import org.apache.log4j.Logger; 14 import org.apache.poi.hssf.usermodel.HSSFCell; 15 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 16 import org.apache.poi.hssf.usermodel.HSSFFont; 17 import org.apache.poi.hssf.usermodel.HSSFRichTextString; 18 import org.apache.poi.hssf.usermodel.HSSFRow; 19 import org.apache.poi.hssf.usermodel.HSSFSheet; 20 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 21 import org.apache.poi.hssf.util.HSSFColor; 22 import org.apache.poi.ss.usermodel.Cell; 23 import org.apache.poi.ss.usermodel.Row; 24 import org.apache.poi.ss.usermodel.Sheet; 25 import org.apache.poi.ss.usermodel.Workbook; 26 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 27 28 29 30 /** 31 * @ClassName: ExcelUtil 32 * @Description: Excel导入导出工具类 33 * @author 周宣 34 * @date 2016-11-8 下午7:16:11 35 * 36 */ 37 public class ExcelUtil { 38 private static final Logger logger = Logger.getLogger(ExcelUtil.class); 39 40 /** 41 * @Title: createWorkbook 42 * @Description: 判断excel文件后缀名,生成不同的workbook 43 * @param @param is 44 * @param @param excelFileName 45 * @param @return 46 * @param @throws IOException 47 * @return Workbook 48 * @throws 49 */ 50 public Workbook createWorkbook(InputStream is,String excelFileName) throws IOException{ 51 if (excelFileName.endsWith(".xls")) { 52 return new HSSFWorkbook(is); 53 }else if (excelFileName.endsWith(".xlsx")) { 54 return new XSSFWorkbook(is); 55 } 56 return null; 57 } 58 59 /** 60 * @Title: getSheet 61 * @Description: 根据sheet索引号获取对应的sheet 62 * @param @param workbook 63 * @param @param sheetIndex 64 * @param @return 65 * @return Sheet 66 * @throws 67 */ 68 public Sheet getSheet(Workbook workbook,int sheetIndex){ 69 return workbook.getSheetAt(0); 70 } 71 72 /** 73 * @Title: importDataFromExcel 74 * @Description: 将sheet中的数据保存到list中, 75 * 1、调用此方法时,vo的属性个数必须和excel文件每行数据的列数相同且一一对应,vo的所有属性都为String 76 * 2、在action调用此方法时,需声明 77 * private File excelFile;上传的文件 78 * private String excelFileName;原始文件的文件名 79 * 3、页面的file控件name需对应File的文件名 80 * @param @param vo javaBean 81 * @param @param is 输入流 82 * @param @param excelFileName 83 * @param @return 84 * @return List<Object> 85 * @throws 86 */ 87 public List<Object> importDataFromExcel(Object vo,InputStream is,String excelFileName){ 88 List<Object> list = new ArrayList<Object>(); 89 try { 90 //创建工作簿 91 Workbook workbook = this.createWorkbook(is, excelFileName); 92 //创建工作表sheet 93 Sheet sheet = this.getSheet(workbook, 0); 94 //获取sheet中数据的行数 95 int rows = sheet.getPhysicalNumberOfRows(); 96 //获取表头单元格个数 97 int cells = sheet.getRow(0).getPhysicalNumberOfCells(); 98 //利用反射,给JavaBean的属性进行赋值 99 Field[] fields = vo.getClass().getDeclaredFields();100 for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据101 Row row = sheet.getRow(i);102 int index = 0;103 while (index < cells) {104 Cell cell = row.getCell(index);105 if (null == cell) {106 cell = row.createCell(index);107 }108 cell.setCellType(Cell.CELL_TYPE_STRING);109 String value = null == cell.getStringCellValue()?"":cell.getStringCellValue();110 111 Field field = fields[index];112 String fieldName = field.getName();113 String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);114 Method setMethod = vo.getClass().getMethod(methodName, new Class[]{String.class});115 setMethod.invoke(vo, new Object[]{value});116 index++;117 }118 if (isHasValues(vo)) {//判断对象属性是否有值119 list.add(vo);120 vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});//重新创建一个vo对象121 }122 123 }124 } catch (Exception e) {125 logger.error(e);126 }finally{127 try {128 is.close();//关闭流129 } catch (Exception e2) {130 logger.error(e2);131 }132 }133 return list;134 135 }136 137 /** 138 * @Title: isHasValues 139 * @Description: 判断一个对象所有属性是否有值,如果一个属性有值(分空),则返回true140 * @param @param object141 * @param @return142 * @return boolean143 * @throws 144 */145 public boolean isHasValues(Object object){146 Field[] fields = object.getClass().getDeclaredFields();147 boolean flag = false;148 for (int i = 0; i < fields.length; i++) {149 String fieldName = fields[i].getName();150 String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);151 Method getMethod;152 try {153 getMethod = object.getClass().getMethod(methodName);154 Object obj = getMethod.invoke(object);155 if (null != obj && "".equals(obj)) {156 flag = true;157 break;158 }159 } catch (Exception e) {160 logger.error(e);161 }162 163 }164 return flag;165 166 }167 168 public <T> void exportDataToExcel(List<T> list,String[] headers,String title,OutputStream os){169 HSSFWorkbook workbook = new HSSFWorkbook();170 //生成一个表格171 HSSFSheet sheet = workbook.createSheet(title);172 //设置表格默认列宽15个字节173 sheet.setDefaultColumnWidth(15);174 //生成一个样式175 HSSFCellStyle style = this.getCellStyle(workbook);176 //生成一个字体177 HSSFFont font = this.getFont(workbook);178 //把字体应用到当前样式179 style.setFont(font);180 181 //生成表格标题182 HSSFRow row = sheet.createRow(0);183 row.setHeight((short)300);184 HSSFCell cell = null;185 186 for (int i = 0; i < headers.length; i++) { 187 cell = row.createCell(i);188 cell.setCellStyle(style);189 HSSFRichTextString text = new HSSFRichTextString(headers[i]);190 cell.setCellValue(text);191 }192 193 //将数据放入sheet中194 for (int i = 0; i < list.size(); i++) {195 row = sheet.createRow(i+1);196 T t = list.get(i);197 //利用反射,根据JavaBean属性的先后顺序,动态调用get方法得到属性的值198 Field[] fields = t.getClass().getFields();199 try {200 for (int j = 0; j < fields.length; j++) {201 cell = row.createCell(j);202 Field field = fields[j];203 String fieldName = field.getName();204 String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);205 Method getMethod = t.getClass().getMethod(methodName,new Class[]{});206 Object value = getMethod.invoke(t, new Object[]{});207 208 if(null == value)209 value ="";210 cell.setCellValue(value.toString());211 212 }213 } catch (Exception e) {214 logger.error(e);215 }216 }217 218 try {219 workbook.write(os);220 } catch (Exception e) {221 logger.error(e);222 }finally{223 try {224 os.flush();225 os.close();226 } catch (IOException e) {227 logger.error(e);228 }229 }230 231 }232 233 /** 234 * @Title: getCellStyle 235 * @Description: 获取单元格格式236 * @param @param workbook237 * @param @return238 * @return HSSFCellStyle239 * @throws 240 */241 public HSSFCellStyle getCellStyle(HSSFWorkbook workbook){242 HSSFCellStyle style = workbook.createCellStyle();243 style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);244 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);245 style.setBorderBottom(HSSFCellStyle.BORDER_THIN);246 style.setBorderTop(HSSFCellStyle.BORDER_THIN);247 style.setLeftBorderColor(HSSFCellStyle.BORDER_THIN);248 style.setRightBorderColor(HSSFCellStyle.BORDER_THIN);249 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);250 251 return style;252 }253 254 /** 255 * @Title: getFont 256 * @Description: 生成字体样式257 * @param @param workbook258 * @param @return259 * @return HSSFFont260 * @throws 261 */262 public HSSFFont getFont(HSSFWorkbook workbook){263 HSSFFont font = workbook.createFont();264 font.setColor(HSSFColor.WHITE.index);265 font.setFontHeightInPoints((short)12);266 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);267 return font;268 }269 270 public boolean isIE(HttpServletRequest request){271 return request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0?true:false; 272 }273 }
阅读全文
0 0
- java项目中Excel文件的导入导出
- java项目中Excel文件的导入导出
- java项目中Excel文件的导入导出
- java中导入导出Excel文件
- java实现Excel文件的导入导出
- Java中Excel的导入导出
- java Excel文件导入导出
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- Java中导入、导出Excel
- java中导入、导出excel
- 时间复杂度从O(n^3)到O(n^2)的优化
- 19. php 编译 pcntl
- 爬虫第一天(3)
- 2017ICPC 南宁网络赛M Frequent Subsets Problem
- 0博文资料目录---------------------------------------------------------------------------------------------
- java项目中Excel文件的导入导出
- #PHP#(二)变量和常量
- Gym
- python 论坛自动发帖功能
- ubuntu环境下JDK环境配置
- 简单前端——圆与圆碰撞检测
- 我所了解的指令和数据的13种寻址方式
- 17 徐然 C语言程序设计(P008)习题1
- hdu2255(KM算法模板)