POI导入excel文件2
POI上传到服务器读取excel文件1中已经介绍了上传文件和导入excel所有的内容http://www.cnblogs.com/fxwl/p/5896893.html ,
本文中只是单单读取本地文件并打印到空值台
并对列合并单元格进行了简单的排除
- package com.daat.manager.base.web.tools;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PushbackInputStream;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.apache.poi.POIXMLDocument;
- import org.apache.poi.hssf.usermodel.HSSFDateUtil;
- import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
- import org.apache.poi.poifs.filesystem.POIFSFileSystem;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- import org.apache.poi.ss.util.CellRangeAddress;
- public class ExcelInfo {
- public static void main(String[] args){
- long start2003 = System.currentTimeMillis();
- String path2003 = "D:\\";
- String FileName="aaaaa.xls";
- excelInfo(path2003,FileName);
- long end2003 = System.currentTimeMillis();
- System.out.println("解析Excel2003完毕!共用时"+(end2003-start2003)+"毫秒!");
- }
- public static List excelInfo(String path,String FileName){
- List excellist=new ArrayList();
- String path2003 = "";//Excel2003文件路径
- //解析Excel
- excellist = parseExcel(path+File.separator+FileName);
- System.out.println(excellist.size());
- // deleteFile(path,FileName);
- return excellist;
- }
- /**
- * 根据路径加载解析Excel
- * @param path
- * @return
- */
- public static List parseExcel(String path){
- List excellist = new ArrayList();
- System.out.println(path);
- Map map = new HashMap();
- File file = null;
- InputStream input = null;
- Workbook workBook = null;
- Sheet sheet = null;
- if (path != null && path.length() > ) {
- // 判断文件是否是Excel(2003、2007)
- String suffix = path.substring(path.lastIndexOf("."), path.length());
- if (".xls".equals(suffix) || ".xlsx".equals(suffix)) {// 2003后缀或2007后缀
- file = new File(path);
- try {
- input = new FileInputStream(file);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- throw new RuntimeException("未找到指定的文件!");
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException("读取Excel文件发生异常!");
- }
- if (!input.markSupported()) {
- input = new PushbackInputStream(input, );
- }
- try {
- if (POIFSFileSystem.hasPOIFSHeader(input)
- || POIXMLDocument.hasOOXMLHeader(input)) {
- workBook = WorkbookFactory.create(input);
- } else {
- throw new RuntimeException("非法的输入流:当前输入流非OLE2流或OOXML流!");
- }
- } catch (IOException e) {
- e.printStackTrace();
- throw new RuntimeException("创建表格工作簿对象发生IO异常!原因:"+ e.getMessage());
- } catch (InvalidFormatException e) {
- // Your InputStream was neither an OLE2 stream, nor an OOXML
- // stream.
- e.printStackTrace();
- throw new RuntimeException("非法的输入流:当前输入流非OLE2流或OOXML流!");
- }
- try {
- if (workBook != null) {
- int numberSheet = workBook.getNumberOfSheets();
- if (numberSheet > ) {
- sheet = workBook.getSheetAt();// 获取第一个工作簿(Sheet)的内容【注意根据实际需要进行修改】
- //getExcelContent(sheet);
- readExcelSheet(sheet,);
- } else {
- throw new RuntimeException("目标表格工作簿(Sheet)数目为0!");
- }
- }
- input.close();
- } catch (IOException e) {
- e.printStackTrace();
- throw new RuntimeException("关闭输入流异常!" + e.getMessage());
- }
- } else {
- throw new RuntimeException("非法的Excel文件后缀!");
- }
- } else {
- throw new RuntimeException("非法的文件路径!");
- }
- return excellist;
- }
- /**
- * 解析(读取)Excel内容
- * @param sheet
- * @return
- */
- @SuppressWarnings("static-access")
- public static void getExcelContent(Sheet sheet){
- int rowCount = sheet.getPhysicalNumberOfRows();// 总行数
- int colCount = sheet.getRow().getPhysicalNumberOfCells();// 总列数
- if(rowCount<=){
- throw new RuntimeException("内容为空");
- }
- Row titleRow=sheet.getRow();//标题行
- for(int i=;i<rowCount;i++){
- List excetList =new ArrayList();
- Row row = sheet.getRow(i);// 第i行
- Cell cell = row.getCell();// 列1列
- for(int j=;j<colCount;j++){
- if(cell.getCellType() == cell.CELL_TYPE_BLANK){//空值
- excetList.add(" ");
- }else if(cell.getCellType()==cell.CELL_TYPE_STRING){//string类型
- excetList.add(cell.getStringCellValue().trim());
- }else if(cell.getCellType() == cell.CELL_TYPE_NUMERIC){//数字类型
- if (HSSFDateUtil.isCellDateFormatted(cell)) {//日期类型
- excetList.add(cell.getDateCellValue());
- }else{
- excetList.add(cell.getNumericCellValue());
- }
- }
- }
- System.out.println("第"+i++"行-----"+excetList.toString());
- }
- }
- /**
- * 读取excel文件
- * @param wb
- * @param sheetIndex sheet页下标:从0开始
- * @param startReadLine 开始读取的行:从0开始
- * @param tailLine 去除最后读取的行
- */
- public static void readExcelSheet( Sheet sheet, int startReadLine) {
- Row row = null;
- List strlist=new ArrayList();
- for(int i=startReadLine; i<=sheet.getLastRowNum(); i++) {
- row = sheet.getRow(i);
- for(Cell c : row) {
- c.setCellType(Cell.CELL_TYPE_STRING);
- boolean isMerge = isMergedRegion(sheet, i, c.getColumnIndex());
- //判断是否具有合并单元格
- if(isMerge) {
- String rs = getMergedRegionValue(sheet, row.getRowNum(), c.getColumnIndex());
- if(!contains(strlist,rs)){
- System.out.print(rs + " ");
- }
- }else {
- System.out.print(c.getRichStringCellValue()+" ");
- }
- }
- System.out.println();
- }
- }
- /**
- * 获取合并单元格的值
- * @param sheet
- * @param row
- * @param column
- * @return
- */
- public static String getMergedRegionValue(Sheet sheet ,int row , int column){
- int sheetMergeCount = sheet.getNumMergedRegions();
- for(int i = ; i < sheetMergeCount ; i++){
- CellRangeAddress ca = sheet.getMergedRegion(i);
- int firstColumn = ca.getFirstColumn();
- int lastColumn = ca.getLastColumn();
- int firstRow = ca.getFirstRow();
- int lastRow = ca.getLastRow();
- if(row >= firstRow && row <= lastRow){
- if(column >= firstColumn && column <= lastColumn){
- Row fRow = sheet.getRow(firstRow);
- Cell fCell = fRow.getCell(firstColumn);
- return getCellValue(fCell) ;
- }
- }
- }
- return null ;
- }
- /**
- * 获取单元格的值
- * @param cell
- * @return
- */
- public static String getCellValue(Cell cell) {
- if (cell == null)
- return "";
- if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
- return cell.getStringCellValue();
- } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
- return String.valueOf(cell.getBooleanCellValue());
- } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
- return cell.getCellFormula();
- } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
- return String.valueOf(cell.getNumericCellValue());
- }
- return "";
- }
- /**
- * 判断合并了行
- * @param sheet
- * @param row
- * @param column
- * @return
- */
- @SuppressWarnings("unused")
- public static boolean isMergedRow(Sheet sheet,int row ,int column) {
- int sheetMergeCount = sheet.getNumMergedRegions();
- for (int i = ; i < sheetMergeCount; i++) {
- CellRangeAddress range = sheet.getMergedRegion(i);
- int firstColumn = range.getFirstColumn();
- int lastColumn = range.getLastColumn();
- int firstRow = range.getFirstRow();
- int lastRow = range.getLastRow();
- if(row == firstRow && row == lastRow){
- if(column >= firstColumn && column <= lastColumn){
- return true;
- }
- }
- }
- return false;
- }
- /**
- * 判断指定的单元格是否是合并单元格
- *
- * @param sheet
- * @param row
- * 行下标
- * @param column
- * 列下标
- * @return
- */
- @SuppressWarnings("unused")
- public static boolean isMergedRegion(Sheet sheet, int row, int column) {
- int sheetMergeCount = sheet.getNumMergedRegions();
- for (int i = ; i < sheetMergeCount; i++) {
- CellRangeAddress range = sheet.getMergedRegion(i);
- int firstColumn = range.getFirstColumn();
- int lastColumn = range.getLastColumn();
- int firstRow = range.getFirstRow();
- int lastRow = range.getLastRow();
- if (row >= firstRow && row <= lastRow) {
- if (column >= firstColumn && column <= lastColumn) {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * 判断sheet页中是否含有合并单元格
- * @param sheet
- * @return
- */
- public boolean hasMerged(Sheet sheet) {
- return sheet.getNumMergedRegions() > ? true : false;
- }
- /**
- * 合并单元格
- *
- * @param sheet
- * @param firstRow
- * 开始行
- * @param lastRow
- * 结束行
- * @param firstCol
- * 开始列
- * @param lastCol
- * 结束列
- */
- @SuppressWarnings("unused")
- public void mergeRegion(Sheet sheet, int firstRow, int lastRow,
- int firstCol, int lastCol) {
- sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol,
- lastCol));
- }
- /**
- * 判断某个字符串是否存在于数组中
- * @param stringArray 原数组
- * @param source 查找的字符串
- * @return 是否找到
- */
- public static boolean contains(List stringArray, String source) {
- // 利用list的包含方法,进行判断
- if (stringArray.contains(source)) {
- return true;
- } else {
- stringArray.add(source);
- return false;
- }
- }
- }
转载表明出处谢谢
POI导入excel文件2的更多相关文章
- Java POI导入Excel文件
今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...
- 友好解决POI导入Excel文件行是不是为空
继 解决POI读取Excel如何判断行是不是为空 后发现了一个问题.这个是一个银行的需求,有20万个客户的资料要导入系统,但有的资料是有问题的(不能正常导入),但也有能正常导入的.现在的问题是怎么知道 ...
- java如何导入Excel文件
Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- excel数据 入库mysql 和 mysql数据 导入excel文件
1.excel数据入库mysql 首先准备excel文件, 标红的地方需要留意,一个是字段名所在行,一个表名对应页: 然后私用mysql工具 navicat, 选择数据库,然后导入文件, 选中相应ex ...
- Java解析导入Excel文件后台代码实现
使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...
随机推荐
- textarea拖拽控制
一.用处 textarea默认时允许用户以拖拽形式来改变textarea大小,但textarea的大小变化会撑大其父节点,有时会破坏整体布局,有时我们并不希望textarea随意拖拽. forklif ...
- Django_rest_framework_组件(authentication、permission、throttle)
认证组件 说明 from rest_framework.authentication import BaseAuthentication class TestAuthentication(BaseAu ...
- CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法
CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...
- 利用cocoapods创建基于git的私有库Spec Repo
上一篇文章记录了我利用cocoapods创建基于SVN的私有库的全部过程,今天我再记录一下基于git创建的过程. 整体先说明一下创建一个私有的podspec包括如下那么几个步骤: 创建并设置一个私有的 ...
- 软件功能说明书final修订
贪吃蛇(单词版)软件功能说明书final修订 1 开发背景 “贪吃蛇”这个游戏对于80,90后的人来说是童年的记忆,可以将其说为是一个时代的经典,实现了传统贪吃蛇的游戏功能:现在人们对英语的重视程度越 ...
- 学霸网站-Alpha版本发布说明
项目名称 学霸网站 项目版本 Alpha 项目团队 ourteam 发布日期 2014-11-23 一.版本的新功能 1.匿名提问 用户提问的时候可以选择匿名提问,这样在问题的详细信息不会显示提出者的 ...
- TeamWork#1,Week 2,Learn In Team
我觉得做为一个团队,每个人的能力固然重要,但是更重要的是几个人能同心协力. 俗话说“三个臭皮匠,赛过诸葛亮”,团队合作往往能激发出团体不可思议的潜力,集体协作干出的成果往往能超过成员个人业绩的总和.在 ...
- 使用switchPage.js插件jQuery全屏滚动翻页
1. 先引入jquery.js,再引入switchPage.js 文件地址:点击打开链接 <script src="jquery.min.js"></script ...
- c++课的圆周面积
又回顾了一下一两个月没动过的类,似乎又有点手生了,不过还好还可以做. 在栋哥的推荐下下载了一个vs2015,表示从dev的白鼠形式的简单操作缓过来还有些不习惯呢,不过有些功能,例如诊断还是挺好用的 这 ...
- 优先队列的一种实现--堆ADT
二叉堆的两个重要性质: 1.结构性,为完全二叉树,可以用数组方便地表示.2.堆序性:树中每个节点的关键字值大于或等于其父节点的关键字值. 二叉堆的数据结构声明如下: struct HeapStruct ...