关闭

POI Excel操作与数据类型处理

255人阅读 评论(0) 收藏 举报
分类:

简单的操作 附 Maven 配置

[html] view plain copy
 print?
  1. <span style="white-space:pre">      </span><dependency>  
  2.             <groupId>org.apache.poi</groupId>  
  3.             <artifactId>poi</artifactId>  
  4.             <version>3.9</version>  
  5.         </dependency>  
  6.         <dependency>  
  7.             <groupId>org.apache.poi</groupId>  
  8.             <artifactId>poi-excelant</artifactId>  
  9.             <version>3.9</version>  
  10.         </dependency>  
注:
  1. POIFSFileSystem excelFile = new POIFSFileSystem(new FileInputStream("E:/sellOrder.xls"));
  2. HSSFWorkbook wb = new HSSFWorkbook(excelFile);
用以上语句导出excel的时候报错:
信息: Request processing failed; nested exception is org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. POI only supports OLE2 Office documents
 
原因是:
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls 
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx



[java] view plain copy
 print?
  1. import java.io.FileInputStream;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.util.Date;  
  6.   
  7. import org.apache.poi.hssf.usermodel.HSSFCell;  
  8. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  9. import org.apache.poi.hssf.usermodel.HSSFDataFormat;  
  10. import org.apache.poi.hssf.usermodel.HSSFRow;  
  11. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  13. import org.apache.poi.hssf.util.HSSFColor;  
  14. import org.apache.poi.xssf.usermodel.XSSFRow;  
  15. import org.apache.poi.xssf.usermodel.XSSFSheet;  
  16. import org.apache.poi.xssf.usermodel.XSSFWorkbook;    
  17.   
  18. public class ExcelTest {  
  19.       
  20.     public static void crateExcel(){  
  21.         HSSFWorkbook wb = new HSSFWorkbook();  
  22.         HSSFSheet sheet = wb.createSheet("new sheet");  
  23.         HSSFRow row = sheet.createRow(0);  
  24.         HSSFCell cell = row.createCell(0);  
  25.         cell.setCellValue("Name");  
  26.           
  27.         HSSFCell cell2 = row.createCell(1);  
  28.         cell2.setCellValue("Neal");  
  29.           
  30.         HSSFCell cell3 = row.createCell(2);  
  31.         cell3.setCellValue(true);  
  32.           
  33.         HSSFCellStyle cellStyle = wb.createCellStyle();  
  34.         cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));  
  35.         HSSFCell dCell = row.createCell(3);  
  36.         dCell.setCellValue(new Date());  
  37.         dCell.setCellStyle(cellStyle);  
  38.           
  39.         HSSFCellStyle backageStyle = wb.createCellStyle();  
  40.         backageStyle.setFillForegroundColor(new HSSFColor.GREY_25_PERCENT().getIndex());  
  41.         HSSFCell cell5 = row.createCell(4);  
  42.         cell5.setCellValue("Color");  
  43.         cell5.setCellStyle(backageStyle);  
  44.           
  45.         HSSFCellStyle backageStyle2 = wb.createCellStyle();  
  46.         backageStyle2.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT().getIndex());  
  47.         backageStyle2.setBorderBottom((short)1);  
  48.         backageStyle2.setBorderTop((short)1);  
  49.         backageStyle2.setBorderLeft((short)1);  
  50.         backageStyle2.setBorderRight((short)1);  
  51.           
  52.         HSSFCell cell6 = row.createCell(5);  
  53.         cell6.setCellValue("Color2");  
  54.         cell6.setCellStyle(backageStyle2);  
  55.           
  56.         // Number Formart  
  57.         HSSFCellStyle numberFormart = wb.createCellStyle();  
  58.         numberFormart.setDataFormat(HSSFDataFormat.getBuiltinFormat(",###"));  
  59.         HSSFCell cell7 = row.createCell(6);  
  60.         cell7.setCellValue((double)1111111111.11111);  
  61.         cell7.setCellStyle(numberFormart);  
  62.           
  63.           
  64.         try {  
  65.             FileOutputStream fileOutputStream = new FileOutputStream("workbooks.xls");  
  66.             wb.write(fileOutputStream);  
  67.             fileOutputStream.close();  
  68.         } catch (FileNotFoundException e) {  
  69.             // TODO Auto-generated catch block  
  70.             e.printStackTrace();  
  71.         } catch (IOException e) {  
  72.             // TODO Auto-generated catch block  
  73.             e.printStackTrace();  
  74.         }  
  75.           
  76.     }  
  77.       
  78.     public static void loadExcelByXsl(){  
  79.         try {  
  80.             HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("workbooks.xls"));  
  81.             HSSFSheet sheet = workbook.getSheet("new sheet");  
  82.             HSSFRow row1 = sheet.getRow(0);  
  83.             if(row1!=null){  
  84.                 System.out.println(row1.getCell(0).getStringCellValue());  
  85.             }  
  86.             HSSFRow row2 = sheet.getRow(1);  
  87.             if(row2 == null){  
  88.                 System.out.println("Null");  
  89.             }  
  90.               
  91.         } catch (FileNotFoundException e) {  
  92.             // TODO Auto-generated catch block  
  93.             e.printStackTrace();  
  94.         } catch (IOException e) {  
  95.             // TODO Auto-generated catch block  
  96.             e.printStackTrace();  
  97.         }  
  98.     }  
  99.     public static void loadExcelByXslx(){  
  100.         try {  
  101.             XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("workbooks.xlsx"));  
  102.             XSSFSheet sheet = workbook.getSheet("new sheet");  
  103.             XSSFRow row1 = sheet.getRow(0);  
  104.             if(row1!=null){  
  105.                 System.out.println(row1.getCell(0).getStringCellValue());  
  106.             }  
  107.             XSSFRow row2 = sheet.getRow(1);  
  108.             if(row2 == null){  
  109.                 System.out.println("Null");  
  110.             }  
  111.               
  112.         } catch (FileNotFoundException e) {  
  113.             // TODO Auto-generated catch block  
  114.             e.printStackTrace();  
  115.         } catch (IOException e) {  
  116.             // TODO Auto-generated catch block  
  117.             e.printStackTrace();  
  118.         }  
  119.     }  
  120.       
  121.       
  122.     public static void main(String[] args) {  
  123.         loadExcelByXslx();  
  124.     }  
  125.       
  126. }  



java解析excel解决excel类型问题

//解决excel类型问题,获得数值  
    public  String getValue(Cell cell) {  
        String value = "";  
        if(null==cell){  
            return value;  
        }  
        switch (cell.getCellType()) {  
        //数值型  
        case Cell.CELL_TYPE_NUMERIC:  
            if (HSSFDateUtil.isCellDateFormatted(cell)) {  
                //如果是date类型则 ,获取该cell的date值  
                Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());  
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                value = format.format(date);;  
            }else {// 纯数字  
                BigDecimal big=new BigDecimal(cell.getNumericCellValue());  
                value = big.toString();  
                //解决1234.0  去掉后面的.0  
                if(null != value && !"".equals(value.trim())){  
                     String[] item = value.split("[.]");  
                     if(1<item.length&&"0".equals(item[1])){  
                         value=item[0];  
                     }  
                }  
            }  
            break;  
            //字符串类型   
        case Cell.CELL_TYPE_STRING:  
            value = cell.getStringCellValue().toString();  
            break;  
        // 公式类型  
        case Cell.CELL_TYPE_FORMULA:  
            //读公式计算值  
            value = String.valueOf(cell.getNumericCellValue());  
            if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串  
                value = cell.getStringCellValue().toString();  
            }  
            break;  
        // 布尔类型  
        case Cell.CELL_TYPE_BOOLEAN:  
            value = " "+ cell.getBooleanCellValue();  
            break;  
        // 空值  
        case Cell.CELL_TYPE_BLANK:   
            value = "";  
            LogUtil.getLogger().error("excel出现空值");  
            break;  
        // 故障  
        case Cell.CELL_TYPE_ERROR:   
            value = "";  
            LogUtil.getLogger().error("excel出现故障");  
            break;  
        default:  
            value = cell.getStringCellValue().toString();  
    }  
    if("null".endsWith(value.trim())){  
        value="";  
    }  
  return value;  
}  


0
0
查看评论

使用poi读取Excel中的各种数据类型处理

Excel中可能会有各种数据格式,但poi只提供了那几种,这就要我们好好处理我们想要的数据了 以下是我的总结: if (null != cell) { // 以下是判断数据的类型 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE...
  • qq_36827957
  • qq_36827957
  • 2017-07-17 08:59
  • 546

java处理Excel(POI包)

Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.o...
  • qingfeng_825
  • qingfeng_825
  • 2007-05-15 17:46
  • 2016

Java用POI处理Excel中的日期

在Excel中的日期格式,其数值为距离1900年1月1日的天数,比如2016-9-2将其转化为数字格式时变成了42615,在用java处理的时候,读取的也将是42615。 在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理。正确的处理...
  • csdnhff
  • csdnhff
  • 2016-09-02 17:16
  • 1790

POI读取Excel数据类型的判断方法

网上看到许多关于利用POI输出Excel单元格内容的文章,但都是利用Cell.getCellType来获取Excel单元格的数据类型,我也利用这个方法 确实可以判断数据类型,Cell.CELL_TYPE_NUMERIC,Cell.CELL_TYPE_FORMULA,Cell.CELL_TYPE_BO...
  • overu88
  • overu88
  • 2017-07-06 10:40
  • 1026

【JAVA】apache poi excel 文件读取,各种数据类型,不规则excel格式都可以读取

本文将通过实例来介绍apache poi  读取excel的原理,包括各种数据类型的处理,本文提供的代码非常通用,即使不规则的excel文件,也可以读取。 直接看代码吧 package poi.excel; import java.io.File; import java.text.De...
  • chiweitree
  • chiweitree
  • 2015-12-30 11:13
  • 6052

Java使用Apache poi 操作Excel-基本概念与使用

通过POI简化了EXCEL的操作,其中POI提供的WorkBook, spreadsheet,Row,Cell及其实现类来完成对Excel中对应部分(Excel文件,电子表格,行,单元格)的操作(读取,写入)。此外通过类型,样式,字体等类可以完成各种属性的操作。学习POI主要是搞清楚其核心类与Exc...
  • Revivedsun
  • Revivedsun
  • 2017-01-02 21:50
  • 1534

java poi技术操作excel之读取Excel

代码: package com.csii.rwexcel; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import ja...
  • u013068377
  • u013068377
  • 2016-06-13 17:15
  • 10616

POI处理Excel中时间问题

用POI读取Excel数据:(版本号:POI3.7) 1、读取Excel Java代码   private List rosolveFile(InputStream is, String suffix, &#...
  • fengspg
  • fengspg
  • 2014-07-24 20:43
  • 1707

POI使用案例01---读取excel的数据

1、创建maven项目2、导入poi的依赖<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.ap...
  • wuxintdrh
  • wuxintdrh
  • 2017-10-20 16:09
  • 313

Java用POI操作Excel

1、Java 操作Excel可以使用poi或jxl等,poi和jxl的区别是:据说poi功能稍微强大点,效率高(占内存比较大,已空间换时间);pxl功能稍弱,但基本够用,占用资源比较稳定。POI除了可以操作Excel(ss=HSSF+XSSF)外 还可以操作Word(HWPF+XSLF)、Powe...
  • sanfye
  • sanfye
  • 2015-04-23 12:33
  • 1844
    个人资料
    • 访问:147321次
    • 积分:4220
    • 等级:
    • 排名:第8610名
    • 原创:270篇
    • 转载:80篇
    • 译文:0篇
    • 评论:4条
    最新评论