`
ldzyz007
  • 浏览: 719766 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java中用poi处理Excel表格之读取

    博客分类:
  • java
阅读更多
http://tool.oschina.net/apidocs/apidoc?api=apache-POI

处理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;
}
分享到:
评论

相关推荐

    java poi导出图片到excel示例代码

    在示例代码中,使用了Java POI读取Excel文件,并将其写入到数据库中。首先,需要创建一个Workbook对象,然后使用Workbook对象的getSheet方法获取Excel文件的Sheet对象,最后使用Sheet对象的getRow方法读取Excel文件...

    JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

    JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析 JAVA语言中读取EXCEL文件是非常常见的操作,通过使用POI库(Apache POI)可以轻松地实现该功能。POI库提供了两个主要的实现类:HSSFWorkbook和XSSFWorkbook,其中...

    java引用POI将Word、Excel转换为html

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)等。在Java中使用POI进行文件转换,特别是将Word和Excel文档转换为HTML,...

    poi将word转换成html、样式 表格 图片处理

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在本案例中,我们关注的是如何使用Apache POI将Word文档转换为HTML格式,并且保持原有的样式、表格...

    Java利用POI将office转成HTML

    Apache POI是Java社区开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)等。 首先,让我们深入了解Java中的POI库。POI提供了HSSF和XSSF两个API,分别用于...

    excel表导入数据库 数据库导出excel(idea平台)

    首先,我们需要了解Java中用于处理Excel文件的库,如Apache POI。Apache POI是一个开源项目,提供了读取和写入Microsoft Office格式文件的能力,包括Excel。通过使用POI,我们可以方便地在Java程序中创建、修改和...

    java poi把word文档转化为html,支持doc。

    Java POI库是一个强大的工具,专门用于处理Microsoft Office格式的文件,包括Word(.doc和.docx)文档。在这个特定的场景中,我们利用POI将Word文档转换为HTML格式,以便于在网页上展示或者进行其他Web相关的操作。...

    Java读取word文档内容并输出成网页(含图片,公式)

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,包括Word、Excel和PowerPoint等。在这个场景中,我们将重点讨论如何使用Java POI读取Word文档并将其内容转换为HTML网页...

    java技术结合poi jar包将wrod转为html 完整工程实战

    在Java编程领域,有时我们需要处理各种类型的文档,例如Word(doc和docx)和Excel(xlsx和xls)文件。为了实现这些操作,开发者通常会利用Apache POI库,这是一个强大的API,专门用于处理Microsoft Office格式的文件...

    读EXL中的内容.rar_读取EXCEL内容

    在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格软件,其内容的读取和操作经常被编程人员需求。这个“读EXL中的内容.rar”压缩包文件提供了一个程序,它能帮助我们从Excel文件中读取数据并将其...

    全面挖掘Java Excel API 使用方法.docx

    Java Excel API 的这些方法使得在Java程序中处理Excel数据变得方便,无论是读取表格数据还是进行简单的数据修改。然而,对于更复杂的任务,比如处理图表、公式或者使用更高级的格式化,可能需要寻找其他更强大的库,...

    Plugins+xlsx.zip

    在Unity游戏开发中,有时我们需要处理数据,例如存储角色属性、关卡设置或者游戏配置等,这时Excel表格因其直观易用的特点,常被选为数据管理工具。"Plugins+xlsx.zip"是一个压缩包,其中包含了Unity项目中读取和...

    XSSFjar包XSSFjar包

    Apache POI是一个流行的开源Java库,它允许开发人员在Java应用程序中创建、修改和读取Microsoft Office文档,如Excel、Word和PowerPoint。XSSF代表“XML Spreadsheet Formula Language”,它是POI中用来处理.xlsx...

    swing layout 参考资料

    Java可以使用Apache POI库来读取Excel文件。POI允许程序访问和修改Excel文件的各个单元格,包括读取不同类型的值,如数字、字符串、日期等。 这些知识点涵盖了Swing布局的基本使用,以及如何处理数据输入/输出,...

Global site tag (gtag.js) - Google Analytics