excel表格导入数据库后台JAVA方法
来源:互联网 发布:淘宝商家入驻费用 编辑:程序博客网 时间:2024/05/20 04:48
1.判断文件类型
public class ReadExcal { /** * 对外提供读取excel 的方法 * */ public List<List<Object>> readExcel(File file) throws IOException { String fileName = file.getName(); System.out.println("文件名:"+fileName); String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName .substring(fileName.lastIndexOf(".") + 1); System.out.println("文件类型:"+extension); if ("xls".equals(extension)) { return read2003Excel(file); } else if ("xlsx".equals(extension)) { return read2007Excel(file); } else { throw new IOException("不支持的文件类型"); } }2.版本是否正确
public static Workbook create(InputStream inp) throws IOException,InvalidFormatException { if (!inp.markSupported()) { inp = new PushbackInputStream(inp, 8); } if (POIFSFileSystem.hasPOIFSHeader(inp)) { return new HSSFWorkbook(inp); } if (POIXMLDocument.hasOOXMLHeader(inp)) { return new XSSFWorkbook(OPCPackage.open(inp)); } throw new IllegalArgumentException("你的excel版本目前poi解析不了"); }
3.不同类型对应方法
/** * 读取 office 2003 excel * * @throws IOException * @throws FileNotFoundException */ private static List<List<Object>> read2003Excel(File file) throws IOException { List<List<Object>> list = new LinkedList<List<Object>>(); Workbook hwb=null;try {hwb = create(new FileInputStream(file));} catch (InvalidFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} //HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file)); //表单里的第几张表 int size=hwb.getNumberOfSheets(); for(int k=0;k<size;k++){ Sheet sheet = hwb.getSheetAt(k); Object value = null; Row row = null; Cell cell = null; int counter = 0; for (int i = sheet.getFirstRowNum()+1; counter+1 < sheet .getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } else { counter++; } List<Object> linked = new LinkedList<Object>(); for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { continue; } DecimalFormat df = new DecimalFormat("0");// 格式化 number String // 字符 SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd");// 格式化日期字符串 DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字 switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: // System.out.println(i + "行" + j + " 列 is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: /*System.out.println(i + "行" + j + " 列 is Number type ; DateFormt:" + cell.getCellStyle().getDataFormatString());*/ if ("@".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle() .getDataFormatString())) { value = nf.format(cell.getNumericCellValue()); } else { value = sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue())); } break; case XSSFCell.CELL_TYPE_BOOLEAN: // System.out.println(i + "行" + j + " 列 is Boolean type"); value = cell.getBooleanCellValue(); break; case XSSFCell.CELL_TYPE_BLANK: // System.out.println(i + "行" + j + " 列 is Blank type"); value = ""; break; default: // System.out.println(i + "行" + j + " 列 is default type"); value = cell.toString(); } if (value == null || "".equals(value)) { continue; } linked.add(value); } list.add(linked); } } return list; }
/** * 读取Office 2007 excel * */ private static List<List<Object>> read2007Excel(File file) throws IOException { System.out.println("进入2007excel"); List<List<Object>> list=null; Workbook xwb=null; Sheet sheet=null; try{ list = new LinkedList<List<Object>>(); // 构造 XSSFWorkbook 对象,strPath 传入文件路径 //(jdk版本是否大于1.6.0_18,若没有,则会在new XSSFWorkbook()时报错) //xwb = new XSSFWorkbook(new FileInputStream(file)); xwb=create(new FileInputStream(file)); // 读取第一章表格内容 }catch(Exception e){ System.out.println(e); } System.out.println(list.size()+"-"+xwb.getNumberOfSheets()); for( int o=0;o<xwb.getNumberOfSheets();o++){ sheet = xwb.getSheetAt(o); Object value = null; Row row = null; Cell cell = null; int counter = 0; for (int i = sheet.getFirstRowNum()+1; counter+1 < sheet .getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } else { counter++; } List<Object> linked = new LinkedList<Object>(); for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { continue; } DecimalFormat df = new DecimalFormat("0");// 格式化 number String // 字符 SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字 switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: System.out.println(i + "行" + j + " 列 is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: /* System.out.println(i + "行" + j + " 列 is Number type ; DateFormt:" + cell.getCellStyle().getDataFormatString());*/ if ("@".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle() .getDataFormatString())) { value = nf.format(cell.getNumericCellValue()); } else { /*value = sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue()));*/ } break; case XSSFCell.CELL_TYPE_BOOLEAN: // System.out.println(i + "行" + j + " 列 is Boolean type"); value = cell.getBooleanCellValue(); break; case XSSFCell.CELL_TYPE_BLANK: // System.out.println(i + "行" + j + " 列 is Blank type"); value = ""; break; default: // System.out.println(i + "行" + j + " 列 is default type"); value = cell.toString(); } if (value == null || "".equals(value)) { continue; } linked.add(value); } list.add(linked); } } System.out.println("size:"+list.size()); return list; }
阅读全文
0 0
- excel表格导入数据库后台JAVA方法
- Java中excel表格导入数据库
- java Excel表格导入
- 利用PHPExcel将数据库数据导入excel表格的方法
- 将excel表格导入数据库
- 将EXCEL表格导入数据库
- Excel表格导入SqlServer2005数据库
- excel表格数据导入数据库
- Excel表格内容导入数据库
- java实现Excel导入数据库,数据库中的数据导入到Excel表格中
- 使用java技术将Excel表格内容导入mysql数据库
- 使用java技术将Excel表格内容导入mysql数据库
- 使用java技术将Excel表格内容导入mysql数据库
- JAVA把excel表格的数据导入到数据库
- 使用java技术将Excel表格内容导入mysql数据库
- 使用java技术将Excel表格内容导入mysql数据库
- 使用java技术将Excel表格内容导入mysql数据库
- 使用java技术将Excel表格内容导入mysql数据库
- 为网页前端设置有层次感的背景色
- 阿里技术行丨未来已来新零售技术沙龙报名启动!
- 高并发下PHP请求Redis异常处理
- STL学习笔记4— —容器deque
- (原创)scrapy的MemoryError(后续)
- excel表格导入数据库后台JAVA方法
- ZOJ2112单点修改,区间求第K大
- Tomcat内存溢出解决办法
- mysql的相关问题
- js,jquery then,angular.js $q 异步编程
- C语言符号
- ros-roslaunch启动多台机器ros节点
- Spring思维导图,让Spring不再难懂(mvc篇)
- 日常((⊙_⊙)…)