java Excel表格导入(利用Apache POI导入Excel)

利用Apache POI导入Excel。

HSSFWorkBook:操作2003版本以前的(包括2003版本),扩展名.xls,该类在org.apache.poi:poi中

XSSFWorkBook:操作2007版本以后的(包括2007版本),拓展名.xlsx,该类在org.apache.poi:poi-ooxml中

SXSSFWorkBook:对于海量的数据进行操作

对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。

org.apache.poi.openxml4j.exceptions.InvalidOperationException

org.apache.poi.poifs.filesystem.OfficeXmlFileException

HSSF对xls后缀名的Excel进行读取内容:

[java]  view plain  copy
  1. import org.apache.poi.hssf.usermodel.HSSFCell;  
  2. import org.apache.poi.hssf.usermodel.HSSFRow;  
  3. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  4. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  5. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  6. import org.apache.poi.ss.usermodel.CellStyle;  
  7. import org.apache.poi.ss.usermodel.CellType;   
  8. import java.io.File;  
  9. import java.io.FileInputStream;  
  10. import java.io.IOException;  
  11.   
  12. public class ReadExcelForHSSF {  
  13.     public void read() {  
  14.         File file = new File(".xls格式的表格路径");  
  15.         if (!file.exists())  
  16.             System.out.println("文件不存在");  
  17.         try {  
  18.             //1.读取Excel的对象  
  19.             POIFSFileSystem poifsFileSystem = new POIFSFileSystem(new FileInputStream(file));  
  20.             //2.Excel工作薄对象  
  21.             HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem);  
  22.             //3.Excel工作表对象  
  23.             HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);  
  24.             //总行数  
  25.             int rowLength = hssfSheet.getLastRowNum()+1;  
  26.             //4.得到Excel工作表的行  
  27.             HSSFRow hssfRow = hssfSheet.getRow(0);  
  28.             //总列数  
  29.             int colLength = hssfRow.getLastCellNum();  
  30.             //得到Excel指定单元格中的内容  
  31.             HSSFCell hssfCell = hssfRow.getCell(0);  
  32.             //得到单元格样式  
  33.             CellStyle cellStyle = hssfCell.getCellStyle();  
  34.   
  35.             for (int i = 0; i < rowLength; i++) {  
  36.                 //获取Excel工作表的行  
  37.                 HSSFRow hssfRow1 = hssfSheet.getRow(i);  
  38.                 for (int j = 0; j < colLength; j++) {  
  39.                     //获取指定单元格  
  40.                     HSSFCell hssfCell1 = hssfRow1.getCell(j);    
  41.                     //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常:  
  42.                     //Cannot get a STRING value from a NUMERIC cell  
  43.                     //将所有的需要读的Cell表格设置为String格式  
  44.                     if (hssfCell1 != null) {  
  45.                         hssfCell1.setCellType(CellType.STRING);  
  46.                     }  
  47.                     //获取每一列中的值  
  48.                     System.out.print(hssfCell1.getStringCellValue() + "\t");  
  49.                 }  
  50.                 System.out.println();  
  51.             }  
  52.         } catch (IOException e) {  
  53.             e.printStackTrace();  
  54.         }  
  55.     }  
  56.     public static void main(String[] args) {  
  57.         new ReadExcelForHSSF().read();  
  58.     }  
  59. }  

XSSF对xlsx后缀名的Excel进行读取内容:

[java]  view plain  copy
  1. import org.apache.poi.ss.usermodel.*;    
  2. import java.io.*;  
  3.   
  4. public class ReadExcelForXSSF {  
  5.     public void read() {  
  6.         File file = new File(".xlsx格式的表格路径");  
  7.         InputStream inputStream = null;  
  8.         Workbook workbook = null;  
  9.         try {  
  10.             inputStream = new FileInputStream(file);  
  11.             workbook = WorkbookFactory.create(inputStream);  
  12.             inputStream.close();  
  13.             //工作表对象  
  14.             Sheet sheet = workbook.getSheetAt(0);  
  15.             //总行数  
  16.             int rowLength = sheet.getLastRowNum()+1;  
  17.             //工作表的列  
  18.             Row row = sheet.getRow(0);  
  19.             //总列数  
  20.             int colLength = row.getLastCellNum();  
  21.             //得到指定的单元格  
  22.             Cell cell = row.getCell(0);  
  23.             //得到单元格样式  
  24.             CellStyle cellStyle = cell.getCellStyle();  
  25.             System.out.println("行数:" + rowLength + ",列数:" + colLength);  
  26.             for (int i = 0; i < rowLength; i++) {  
  27.                 row = sheet.getRow(i);  
  28.                 for (int j = 0; j < colLength; j++) {  
  29.                     cell = row.getCell(j);  
  30.                     //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常:  
  31.                     //Cannot get a STRING value from a NUMERIC cell  
  32.                     //将所有的需要读的Cell表格设置为String格式  
  33.                     if (cell != null)  
  34.                         cell.setCellType(CellType.STRING);  
  35.                     //对Excel进行修改  
  36.                     if (i > 0 && j == 1)  
  37.                         cell.setCellValue("1000");  
  38.                     System.out.print(cell.getStringCellValue() + "\t");  
  39.                 }  
  40.                 System.out.println();  
  41.             }    
  42.             //将修改好的数据保存  
  43.             OutputStream out = new FileOutputStream(file);  
  44.             workbook.write(out);  
  45.         } catch (Exception e) {  
  46.             e.printStackTrace();  
  47.         }  
  48.     }  
  49.   
  50.     public static void main(String[] args) {  
  51.         new ReadExcelForXSSF().read();  
  52.     }  
  53. }  

  1. 备注:从excel里面读取日期为数字,解决方法.
  2. 如:43262.466099537 转换以后 2018-06-11 11:11:11
  3. //格式化日期
    public static String  toFormatDate(String kvalue) {
    try {
    System.err.println("date="+kvalue);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(Double.parseDouble(kvalue));  
    kvalue = sdf.format(date);
    System.err.println("toFormatDate="+kvalue);
    } catch (Exception e) {
    System.err.println("toFormatDate====>"+e);
    }

    return kvalue;   

如果你是湖南的 欢迎加入 湖南人在深圳-Java群:557651502

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值