由于在项目中使用了将excel数据导入到数据库。在这里分享一下。

这里使用的POI方式,支持两种格式(xls,xlsx)

package com.entity;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; /**
* excel公共方法
*/
public final class ExcelUtil { private ExcelUtil() { } // 读取excel的结果集
private static ArrayList<Map<String, String>> result = null; // 记录表格中空行的行数
private static int num = 0; private static List<String> numList = new ArrayList<String>(); /**
* 获取需要传入数据库的数据
*/
public static void readExcelData(final String filePath) {
try {
readExcelToObj(filePath);
} catch (Exception e) {
System.out.println("导入失败");
}
} /**
* 读取excel数据
*/
private static ArrayList<Map<String, String>> readExcelToObj(final String path) throws Exception {
Workbook wb = null;
result = new ArrayList<Map<String, String>>();
try {
wb = WorkbookFactory.create(new File(path));
Sheet sheet = wb.getSheetAt(0);
result = readExcel(wb, sheet, 0, 0);
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
} /**
* 读取excel文件
* @param sheet sheet页下标:从0开始
* @param startReadLine 开始读取的行:从0开始
* @param tailLine 去除最后读取的行
*/
private static ArrayList<Map<String, String>> readExcel(final Workbook wb, final Sheet sheet, final int startReadLine, final int tailLine) {
Row row = null;
for (int i = startReadLine; i < sheet.getLastRowNum() - tailLine + 1; i++) {
row = sheet.getRow(i);
Map<String, String> map = new HashMap<String, String>();
for (Cell c : row) {
String returnStr = "";
boolean isMerge = isMergedRegion(sheet, i, c.getColumnIndex());
//判断是否具有合并单元格
if (isMerge) {
String rs = getMergedRegionValue(sheet, row.getRowNum(), c.getColumnIndex());
returnStr = rs;
} else {
returnStr = c.getRichStringCellValue().getString();
} if (c.getColumnIndex() == 0) {
map.put("id", returnStr);
} else if (c.getColumnIndex() == 1) {
map.put("railwayTripsIn", returnStr);
} else if (c.getColumnIndex() == 2) {
map.put("arriveTime", returnStr);
} else if (c.getColumnIndex() == 3) {
map.put("railwayNum", returnStr);
} else if (c.getColumnIndex() == 4) {
map.put("checkTrack", returnStr);
} else if (c.getColumnIndex() == 5) {
map.put("maintenanceTask", returnStr);
} else if (c.getColumnIndex() == 6) {
map.put("maintenanceUnitName", returnStr);
} else if (c.getColumnIndex() == 7) {
map.put("project", returnStr);
} else if (c.getColumnIndex() == 8) {
map.put("startTime", returnStr);
} else if (c.getColumnIndex() == 9) {
map.put("finishTime", returnStr);
} else if (c.getColumnIndex() == 10) {
map.put("linkTrack", returnStr);
} else if (c.getColumnIndex() == 11) {
map.put("outboundTime", returnStr);
} else if (c.getColumnIndex() == 12) {
map.put("railwayTripsOut", returnStr);
}
}
result.add(map);
}
return result;
} public static List<TrackData> splitCenterData(ArrayList<Map<String,String>> result) throws Exception {
trackListData = new ArrayList<TrackData>();
Map<String,String> map = new HashMap<String,String>();
Integer lineNumDataSize = result.size() - 5;
for (int i = 0; i < lineNumDataSize; i++) {
trackData = new TrackData();
map = result.get(i);
trackData.setId(map.get("id").trim());
trackData.setInTimes(map.get("inTimes").trim());
if(map.get("inTime").toString().trim().equals("\\")) {
trackData.setInTime(null);
} else {
trackData.setInTime(map.get("inTime"));
}
trackData.setCarGroud(map.get("carGroud").trim());
trackData.setCheckTrack(map.get("checkTrack").trim());
trackData.setJob(map.get("job").trim());
trackData.setNewsSource(map.get("newsSource").trim());
trackData.setProject(map.get("project").trim());
trackData.setStartTime(map.get("startTime").trim());
trackData.setEndTime(map.get("endTime").trim());
if(map.get("linkTrack").toString().trim().equals("\\")) {
trackData.setLinkTrack(null);
} else {
trackData.setLinkTrack(map.get("linkTrack").trim());
}
if(map.get("outTime").toString().trim().equals("\\")) {
trackData.setOutTime(null);
} else {
trackData.setOutTime(map.get("outTime").trim());
}
if(map.get("outTimes").toString().trim().equals("\\")) {
trackData.setOutTimes(null);
} else {
trackData.setOutTimes(map.get("outTimes").trim());
}
trackListData.add(trackData);
}
return trackListData;
} /**
* 获取合并单元格的值
* @param sheet
* @param row
* @param column
*/
private static String getMergedRegionValue(final Sheet sheet, final int row, final int column) {
int sheetMergeCount = sheet.getNumMergedRegions(); for (int i = 0; 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 sheet
* @param row
* @param column
*/
private static boolean isMergedRow(final Sheet sheet, final int row, final int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; 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 列下标
*/
private static boolean isMergedRegion(final Sheet sheet, final int row, final int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; 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
*/
private static boolean hasMerged(final Sheet sheet) {
return sheet.getNumMergedRegions() > 0 ? true : false;
} /**
* 合并单元格
* @param sheet
* @param firstRow 开始行
* @param lastRow 结束行
* @param firstCol 开始列
* @param lastCol 结束列
*/
private static void mergeRegion(final Sheet sheet, final int firstRow, final int lastRow, final int firstCol, final int lastCol) {
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
} /**
* 获取单元格的值
* @param cell
* @return
*/
private static String getCellValue(final 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 "";
} /**
* 判断行为空 lineNum 为空行的开始位置
*/
private static Integer checkRowNull(final Sheet sheet, final int rows) {
Row row = null;
for (int i = 0; i < rows; i++) {
int cols = sheet.getRow(i).getPhysicalNumberOfCells();
int col = 0;
row = sheet.getRow(i);
for (Cell c : row) {
String returnStr = "";
boolean isMerge = isMergedRegion(sheet, i, c.getColumnIndex());
// 判断是否具有合并单元格
if (isMerge) {
String rs = getMergedRegionValue(sheet, row.getRowNum(), c.getColumnIndex());
returnStr = rs;
} else {
returnStr = c.getRichStringCellValue().getString();
}
if (returnStr.trim() == null || returnStr.trim() == "") {
col++;
}
}
if (cols == col) {
num++;
}
}
return num;
} /**
* 从excel读取内容
*/
private static void readContent(final String fileName) {
boolean isE2007 = false; //判断是否是excel2007格式
if (fileName.endsWith("xlsx")) {
isE2007 = true;
}
try {
InputStream input = new FileInputStream(fileName); //建立输入流
Workbook wb = null;
//根据文件格式(2003或者2007)来初始化
if (isE2007) {
wb = new XSSFWorkbook(input);
} else {
wb = new HSSFWorkbook(input);
}
Sheet sheet = wb.getSheetAt(0); //获得第一个表单
Iterator<Row> rows = sheet.rowIterator(); //获得第一个表单的迭代器
while (rows.hasNext()) {
Row row = rows.next(); //获得行数据
System.out.println("Row #" + row.getRowNum()); //获得行号从0开始
Iterator<Cell> cells = row.cellIterator(); //获得第一行的迭代器
while (cells.hasNext()) {
Cell cell = cells.next();
System.out.println("Cell #" + cell.getColumnIndex());
switch (cell.getCellType()) { //根据cell中的类型来输出数据
case HSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println("unsuported sell type=======" + cell.getCellType());
break;
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

  

Java操作excel(POI)的更多相关文章

  1. Java操作Excel: POI不能创建xlsm问题的方法(源自StackOverFlow)

    write to xlsm (Excel 2007) using apache poi POI的下载(记得把其中的jar包全部加到工程里哦)http://mirror.bit.edu.cn/apach ...

  2. java操作Excel处理数字类型的精度损失问题验证

    java操作Excel处理数字类型的精度损失问题验证: 场景: CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC POI版 ...

  3. java操作Excel、PDF文件

    java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...

  4. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  5. Java 操作 EXCEL

    今天帮朋友写了一段用来处理EXCEL内容的程序,在这里记录下自己的学习过程.主要是对EXCEL表格中的内容做分类和统计,使用计算机来做这种重复的机械性地工作再好不过了.首先,我们需要下载一个java操 ...

  6. JAVA操作Excel时文字自适应单元格的宽度设置方法

    使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...

  7. jxl的使用总结(java操作excel)

    jxl.jar是通过java操作excel表格的工具类库: jxl.jar包:链接:http://pan.baidu.com/s/1o8qFJHw 密码:5jyq 1:通过模拟实现创建一个表格,然后模 ...

  8. Java操作Excel文件以及在Android中的应用

    本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...

  9. 【转载】jxl的使用总结(java操作excel)

    jxl.jar是通过java操作excel表格的工具类库: 链接:https://pan.baidu.com/s/1AAT_eA_Q47zFeQohap6eQg 提取码:777b 1:通过模拟实现创建 ...

  10. java操作excel总结---poi

    前不久做过Excel的导入导出功能,其主要的难点是java如何操作Excel文档.现在就来介绍一下利用Apache的poi如何操作Excel. 1.准备工作:导入Apache POI的相关jar包,P ...

随机推荐

  1. 【python 3.6】笨办法取出列表中的字典的value

    #python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' x = {'RegionSet': [{' ...

  2. 特征点检测--基于CNN:TILDE: A Temporally Invariant Learned DEtector

    TILDE: A Temporally Invariant Learned DEtector Yannick Verdie1,∗ Kwang Moo Yi1,∗ Pascal Fua1 Vincent ...

  3. Python3实现机器学习经典算法(一)KNN

    一.KNN概述 K-(最)近邻算法KNN(k-Nearest Neighbor)是数据挖掘分类技术中最简单的方法之一.它具有精度高.对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常 ...

  4. 团队开发NABCD

    团队成员介绍: 李青:绝对的技术控,团队中扮演“猪”的角色,勤干肯干,是整个团队的主心骨,课上紧跟老师的步伐,下课谨遵老师的指令,课堂效率高,他的编程格言“没有编不出来的程序,只有解决不了的bug”. ...

  5. tomcat开发环境配置

    1.环境配置教程 环境变量.安装版.配置版 2.编写启动tomcat的批处理文件 3.改变端口 4.虚拟目录

  6. 配置resin web方式部署项目

    写在前面,推荐下载resin4.0.47版本.其它版本没有测试 最近打算做一个小项目,然后容器选用了resin.想通过web提交war文件的方式 进行部署,更新代码也方便. 试了resin最新的版本( ...

  7. 青岛 2016ICPC 区域现场赛题目

    A. Relic Discovery B. Pocket Cube C. Pocky D. Lucky Coins E. Fibonacci F. Lambda Calculus G. Coding ...

  8. MQTT协议-----订阅

    MQTT协议笔记之订阅      http://www.blogjava.net/yongboy/archive/2014/04/12/412351.html MQTT - chszs的专栏    h ...

  9. Docker 安装与常用命令介绍

    docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...

  10. ngx_http_rewrite_module(重定向)

    1:指定rewrite规则 rewrite regex replacement [flag];   什么是rewrite规则:If the specified regular expression m ...