POI处理excel

需要包:

  poi-3.9-20121203.jar

  poi-ooxml-3.9-20121203.jar

  poi-ooxml-schemas-3.9-20121203.jar

  xbean.jar

代码

  1 package com.keertech.miis.news.action;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.InputStream;
  6 import java.math.BigDecimal;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9
 10 import org.apache.commons.lang.StringUtils;
 11 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 12 import org.apache.poi.ss.usermodel.Cell;
 13 import org.apache.poi.ss.usermodel.CellValue;
 14 import org.apache.poi.ss.usermodel.DateUtil;
 15 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 16 import org.apache.poi.ss.usermodel.Row;
 17 import org.apache.poi.ss.usermodel.Sheet;
 18 import org.apache.poi.ss.usermodel.Workbook;
 19 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 20 import org.apache.struts2.ServletActionContext;
 21
 22 import com.keertech.base.action.JSONAction;
 23 import com.keertech.miis.news.bean.News;
 24 import com.keertech.miis.news.bean.NewsType;
 25
 26 @SuppressWarnings("serial")
 27 public class MainPageAction extends JSONAction{
 28
 29     private final String directoryPath = ServletActionContext.getServletContext().getInitParameter("filedirectory")+"/mainPageFile";
 30
 31     public String turnToMainPage() throws Exception{
 32
 33 //        List<NewsType> newsTypes = dao.findAll(NewsType.class, " order by createddate desc Fetch First 5 Rows Only");
 34         List<NewsType> newsTypes = (List<NewsType>)dao.findListBySql("select * from miis_news_type order by createddate desc Fetch First 5 Rows Only",null,null);
 35
 36         String filterString = "";
 37         List<News> news = dao.findAll(News.class, filterString);
 38
 39         List<List<String>> excelInfo = readExcel();
 40         System.out.println(excelInfo.size());
 41
 42         request.setAttribute("newsTypes", newsTypes);
 43         request.setAttribute("newses", news);
 44         return SUCCESS;
 45     }
 46
 47     private List<List<String>> readExcel() throws Exception{
 48         List<List<String>> result = new ArrayList<List<String>>();
 49         InputStream input = null;    //excel输入流
 50         try {
 51             String webPath = request.getSession().getServletContext().getRealPath("/");    //web项目部署的实际物理地址E:/tomcat/webapps/em/
 52             String fullPath = webPath+directoryPath;
 53             File directory = new File(fullPath);
 54
 55             if (directory.isDirectory()) {
 56                 System.out.println(fullPath);
 57                 File files[] = directory.listFiles();
 58
 59                 Workbook workbook = null;    //excel工作簿
 60                 File excelFile = null ;
 61                 String excelFileName = null;
 62                 String separator = null;
 63                 for (File file : files) {
 64                     excelFileName = file.getName();
 65                     Integer separatorIndex = excelFileName.lastIndexOf(".");//获取扩展名所在位置
 66                     separator = excelFileName.substring(separatorIndex);//扩展名
 67                     if(".xls".equals(separator)||".xlsx".equals(separator)) {
 68                         excelFile = file;
 69                         input = new FileInputStream(file);
 70                         break;
 71                     }
 72                 }
 73                 //生成excel表格对象
 74                 if (excelFile == null) {
 75                     throw new Exception("无法获取当前excel表格");
 76                 }
 77                 if(".xls".equals(separator)) {
 78                     workbook = new HSSFWorkbook(input);
 79                 } else {
 80                     workbook = new XSSFWorkbook(input);
 81                 }
 82
 83                 //解析工作表
 84                 for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
 85                     Sheet sheet = workbook.getSheetAt(i);
 86                     if( sheet != null ){
 87                         for (int j = 5; j <= sheet.getLastRowNum(); j++) {
 88                             Row row = sheet.getRow(j);    //获取excel行信息
 89                             List<String> rowList = null;
 90                             if( row != null ){
 91                                 rowList = new ArrayList<String>();
 92                                 int cellNumber = row.getPhysicalNumberOfCells();
 93                                 //将列数据装载到list中
 94                                 for (int k = 0; k < cellNumber; k++) {
 95                                     String cellValue = getCellValue(workbook,row.getCell(k)).toString();
 96                                     if (StringUtils.isNotBlank(cellValue)) {
 97                                         rowList.add(cellValue);
 98                                     }
 99                                 }
100                                 result.add(rowList);
101                             }else {
102                                 continue;
103                             }
104                         }
105                     }
106                 }
107             }
108
109         } catch (Exception e) {
110             e.printStackTrace();
111             throw new Exception(e.getMessage());
112         } finally{
113             if(input!=null){
114                 input.close();
115             }
116         }
117         return result;
118     }
119
120     /**
121      * 获取单元格值
122      * @param wb
123      * @param cell
124      * @return
125      */
126     protected Object getCellValue(Workbook wb,Cell cell) {
127         Object result = "";
128         if(cell!=null){
129             switch (cell.getCellType()){
130                 case Cell.CELL_TYPE_STRING:
131                     result =  cell.getStringCellValue().trim();
132                     break;
133                 case Cell.CELL_TYPE_NUMERIC:
134                     if (DateUtil.isCellDateFormatted(cell)){
135                         result = cell.getDateCellValue();
136                     } else {
137                         long longData = (long)cell.getNumericCellValue();
138                         if(longData == cell.getNumericCellValue()){
139                             result = String.valueOf(longData).trim();
140                         }else{
141                             result = String.valueOf(cell.getNumericCellValue()).trim();
142                         }
143                     }
144                     break;
145                 case Cell.CELL_TYPE_FORMULA:    //处理公式
146                     //cell.setCellFormula(cell.getCellFormula());
147                     FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
148                     CellValue cellValue = evaluator.evaluate(cell);
149                     //BigDecimal bigDecimal = new BigDecimal(cell.getCachedFormulaResultType());
150                     BigDecimal bigDecimal = new BigDecimal(cellValue.getNumberValue());
151                     //截取2位小数
152                     result = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString().trim();
153                     break;
154                 case Cell.CELL_TYPE_BOOLEAN:
155                     result = cell.getBooleanCellValue();
156                     break;
157                 default:
158                     break;
159             }
160         }
161         return result;
162     }
163 }

POI处理excel

时间: 2024-10-27 03:39:20

POI处理excel的相关文章

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

POI操作Excel

Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推.行则使用数字表示,例如:A3 表示第三行第一列,E5表示第五行第五列. POI工具包 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 9

POI导出EXCEL经典实现

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

Poi解析Excel

Poi解析Excel Poi包里有4个主要的类,包括: Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取, Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取, Row--------------行,Sheet实例的getRow(int num)方法获取, Cell--------------单元格,Row实例的getCell(int num)方法获取,

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

JAVA的POI操作Excel

1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推.行则使用数字表示,例如:A3 表示第三行第一列,E5表示第五行第五列. 1.2 POI工具包 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Exce

POI操作EXCEL(二)

原文转自:http://www.tqcto.com/article/code/295025.html java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境.然而由于老外的英语只有26个字母,有些情况下,一些程序员用8 位的byte处理,一不小心就去掉了CJK的高位.或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼.还好 在POI HSSF中考虑到这个问题,可以设置encoding为双字节. POI可以到www.apache.org

(5) 如何用Apache POI操作Excel文件-----发现Apache的POI的Bug后,如何给Apache的POI报Bug?

在我上篇文章中,(4) 如何用Apache POI操作Excel文件-----发现了POI-3.12一个回归,通过测试POI-3.12的版本,我发现了一个bug,那么发现bug后,该如何处理.我们有2种处理方式,首先我们到Apache POI的bug库里面搜索,看别人有没有创建类似的bug,如果有创建的,这个是最好的结果,我们只需要关注这个bug什么时候被修复.如果没有搜索不到,这个时候我们就需要给Apache POI报bug了.那么,如何给Apache报Bug? 第一步: 打开https://

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没