java中用poi处理Excel表格之读取
  zw77MQd1kOsI 2023年11月02日 47 0




处理excel可以用jxl.jar和 aphace的poi
jxl.jar停止更新了,只能用其处理2003格式 Excel
aphace的poi,可以处理2003和2007

public static List<String[]> readExcel(File file) throws IOException{ 

 //取文件名 

 String filename = file.getName(); 

 //取文件后缀 

 String subfix = filename.lastIndexOf(".")==-1? "" : filename.substring(filename.lastIndexOf(".")+1); 

 System.out.println(subfix); 

 //获取读取的数据 

 List<String[]> result = new ArrayList<String[]>(); 

 if(subfix.equals("xls")){ 

 result = readExcel2003(file); 

 }else if(subfix.equals("xlsx")){ 

 result = readExcel2007(file); 

 System.out.println(result); 

 }else{ 

 throw new IOException("文件格式不正确"); 

 } 

 return result; 

 } 



 private static List<String[]> readExcel2007(File file) throws IOException { 

 //存放获取的数据 

 List<String[]> result = new ArrayList<String[]>(); 

 //创建一个输入流 

 FileInputStream in= new FileInputStream(file); 

 //创建一个Excel操作对象 

 XSSFWorkbook workbook = new XSSFWorkbook(in); 

 //行大小 

 int rowSize = 0 ; 

 //工作簿个数 

 int sheets = workbook.getNumberOfSheets(); 

 //工作簿对象 

 XSSFSheet sheet; 

 //工作簿中的行 

 XSSFRow row; 

 //行中的单元格 

 XSSFCell cell; 

 //循环工作簿 

 for(int st=0 ; st<sheets ; st++){ 

 //获得对应的工作簿 

 sheet = workbook.getSheetAt(st); 

 //工作簿中的行数 

 int rowNum = sheet.getLastRowNum(); 

 //循环行 

 for(int rowIndex = 1; rowIndex <=rowNum ; rowIndex++){ 

 row = sheet.getRow(rowIndex); 

 if(row == null){ 

 continue; 

 } 

 //当前行列数 

 int tempRowSize = row.getLastCellNum(); 

 //始终让rowSize为最大列数 

 if(tempRowSize > rowSize){ 

 rowSize = tempRowSize; 

 } 

 //单元格数据暂存 

 String[] values = new String[rowSize]; 

 //标识行中是否有数据 

 boolean hasValue = false; 

 //该行中列数 

 int cols = row.getLastCellNum(); 

 for(int col = 0; col < cols; col++){ 

 //暂存党员个数据 

 String value = ""; 

 //单元格 

 cell = row.getCell(col); 

 //如果为空继续下一个单元格 

 if(cell == null){ 

 continue; 

 } 

 //获得对应单元格中对应格式 的数据 

 value = getFormatValue2007(cell); 

 System.out.print(value+"\t"); 

 values[col] = value; 

 hasValue = true; 

 } 

 System.out.println(); 

 //如果有值加入到result 

 if(hasValue){ 

 result.add(values); 

 } 

 } 

 } 

 return result; 

 } 



 public static String getFormatValue2007(XSSFCell cell){ 


 //暂存单元格内容 

 String value = ""; 

 //匹配单元格内容 

 switch (cell.getCellType()) { 

 //数据格式类型 

 case XSSFCell.CELL_TYPE_NUMERIC: 

 //判断是否是日期类型 

 if(HSSFDateUtil.isCellDateFormatted(cell)){ 

 Date date = cell.getDateCellValue(); 

 if(date!=null){ 

 //格式化日期 

 value = new SimpleDateFormat("yyyy-mm-dd").format(date); 

 }else{ 

 value = ""; 

 } 

 }else{ 

 //格式化数据 

 value =new DecimalFormat("0").format(cell.getNumericCellValue()); 

 } 

 break; 

 //字符串类型 

 case XSSFCell.CELL_TYPE_STRING: 

 value = cell.getStringCellValue(); 

 break; 

 //公式生成类型 

 case XSSFCell.CELL_TYPE_FORMULA: 

 //导入时如果为公式生成的数据则无值 

 if(!cell.getStringCellValue().equals("")){ 

 value = cell.getStringCellValue(); 

 }else{ 

 value = cell.getNumericCellValue()+""; 

 } 

 break; 

 //空白 

 case XSSFCell.CELL_TYPE_BLANK: 

 value = ""; 

 break; 

 //布尔型 

 case XSSFCell.CELL_TYPE_BOOLEAN: 

 value = cell.getBooleanCellValue()+""; 

 break; 

 //错误格式 

 case XSSFCell.CELL_TYPE_ERROR: 

 value = ""; 

 break; 

 default: 

 value = cell.toString(); 

 } 

 return value; 

 } 


 private static List<String[]> readExcel2003(File file) throws IOException { 

 //存放获取的数据 

 List<String[]> result = new ArrayList<String[]>(); 

 //创建一个输入流 

 FileInputStream in = new FileInputStream(file); 

 //创建对Excel操作的对象 

 HSSFWorkbook workbook = new HSSFWorkbook(in); 

 //行大小 

 int rowSize = 0; 

 //工作簿的个数 

 int sheets = workbook.getNumberOfSheets(); 

 //工作簿对象 

 HSSFSheet sheet; 

 //行 

 HSSFRow row; 

 //单元格 

 HSSFCell cell; 

 //对每个工作簿进行循环 

 for(int i = 0 ;i < sheets ; i++){ 

 //获得工作簿 

 sheet = workbook.getSheetAt(i); 

 //工作簿中的行数 

 int rowNum = sheet.getLastRowNum(); 

 for(int rowIndex = 1 ; rowIndex <= rowNum ; rowIndex++){ 

 row = sheet.getRow(rowIndex); 

 if(row==null){ 

 continue; 

 } 

 //获取当前行的列数 

 int tempRowSize = row.getLastCellNum(); 

 //总是最大列数 

 if(tempRowSize > rowSize){ 

 rowSize = tempRowSize; 

 } 

 //获得单元格的内容暂存 

 String[] values = new String[rowSize]; 

 //标识Excel中是否有数据 

 boolean hasValue = false; 

 //该行中列数 

 int cols = row.getLastCellNum(); 

 //循环对列取值 

 for(int col = 0 ;col < cols ; col++){ 

 //单元格暂存 

 String value = ""; 

 //获得单元格 

 cell = row.getCell(col); 

 //如果为空继续下一个单元格 

 if(cell == null){ 

 continue; 

 } 

 //获得对应单元格中的格式化数据 

 value = getFormatValue2003(cell); 

 System.out.print(value+"\t"); 

 values[col] = value; 

 hasValue = true; 

 } 

 System.out.println(); 

 //有内容则加入到result中 

 if(hasValue){ 

 result.add(values); 

 } 

 } 

 } 

 return result; 

 } 



 public static String getFormatValue2003(HSSFCell cell){ 


 //暂存单元格内容 

 String value = ""; 

 //匹配单元格内容 

 switch (cell.getCellType()) { 

 //数据格式类型 

 case XSSFCell.CELL_TYPE_NUMERIC: 

 //判断是否是日期类型 

 if(HSSFDateUtil.isCellDateFormatted(cell)){ 

 Date date = cell.getDateCellValue(); 

 if(date!=null){ 

 //格式化日期 

 value = new SimpleDateFormat("yyyy-mm-dd").format(date); 

 }else{ 

 value = ""; 

 } 

 }else{ 

 //格式化数据 

 value =new DecimalFormat("0").format(cell.getNumericCellValue()); 

 } 

 break; 

 //字符串类型 

 case XSSFCell.CELL_TYPE_STRING: 

 value = cell.getStringCellValue(); 

 break; 

 //公式生成类型 

 case XSSFCell.CELL_TYPE_FORMULA: 

 //导入时如果为公式生成的数据则无值 

 if(!cell.getStringCellValue().equals("")){ 

 value = cell.getStringCellValue(); 

 }else{ 

 value = cell.getNumericCellValue()+""; 

 } 

 break; 

 //空白 

 case XSSFCell.CELL_TYPE_BLANK: 

 value = ""; 

 break; 

 //布尔型 

 case XSSFCell.CELL_TYPE_BOOLEAN: 

 value = cell.getBooleanCellValue()+""; 

 break; 

 //错误格式 

 case XSSFCell.CELL_TYPE_ERROR: 

 value = ""; 

 break; 

 default: 

 value = cell.toString(); 

 } 

 return value; 

 }

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   113   0   0 Java
  8s1LUHPryisj   2024年05月17日   47   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
zw77MQd1kOsI