poi 导入导出excel
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*; import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Excel工具类
* 创建Sheet, 填充数据
* created : 2016/3/18.
*/
public class ExcelBuilder { /**
* 创建只包含标题列的sheet表
*
* @param wb
* @param sheetName
* @param titleNames
* @return
*/
public static HSSFSheet createExcelSheetWithTitle(HSSFWorkbook wb, String sheetName, List<String> titleNames) {
if (BlankUtil.isNotEmpty(titleNames)) {
return createExcelSheetWithTitle(wb, sheetName, titleNames.toArray(new String[titleNames.size()]));
}
return createExcelSheetWithTitle(wb, sheetName, new String[]{});
} /**
* 创建只包含标题列的sheet表
*
* @param wb
* @param sheetName
* @param titleNames
* @return
*/
public static HSSFSheet createExcelSheetWithTitle(HSSFWorkbook wb, String sheetName, String[] titleNames) {
if (BlankUtil.isEmpty(sheetName)) {//如果没传sheetName,给定默认值
sheetName = "Sheet";
}
HSSFSheet sheet = wb.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);//设置默认列宽
sheet.setDefaultRowHeight((short) 300);//设置默认行高
if (BlankUtil.isNotEmpty(titleNames)) {//设置Sheet首行列标题
Row row = sheet.createRow(0);
Cell cell = null;
for (int i = 0; i < titleNames.length; i++) {
cell = row.createCell(i);
cell.setCellValue(titleNames[i]);
}
}
return sheet;
} /**
* 创建包含标题列的sheet, 并填充数据
*
* @param wb
* @param sheetName
* @param titleNames
* @param datas
* @return
*/
public static HSSFSheet createExcelSheetWithTitleAndData(
HSSFWorkbook wb, String sheetName, List<String> titleNames, List<Map<String, Object>> datas) {
if (BlankUtil.isNotEmpty(titleNames) && BlankUtil.isNotEmpty(datas)) {
return createExcelSheetWithTitleAndData(wb, sheetName, titleNames.toArray(new String[titleNames.size()]), datas);
}
return createExcelSheetWithTitle(wb, sheetName, new String[]{});
} /**
* 创建包含标题列的sheet, 并填充数据
*
* @param wb
* @param sheetName
* @param titleNames
* @param datas
* @return
*/
public static HSSFSheet createExcelSheetWithTitleAndData(
HSSFWorkbook wb, String sheetName, String[] titleNames, List<Map<String, Object>> datas) {
HSSFSheet sheet = createExcelSheetWithTitle(wb, sheetName, titleNames);//创建包含标题列的空sheet
fillDataToSheet(sheet, datas);//给sheet填充数据
return sheet;
} /**
* 向sheet中填充数据行
*
* @param sheet
* @param datas
*/
public static HSSFSheet fillDataToSheet(HSSFSheet sheet, List<Map<String, Object>> datas) {
if (sheet != null && BlankUtil.isNotEmpty(datas)) {
Row row = null;
Cell cell = null;
Map<String, Object> rowDataMap = null;
Object columnValue = null;
//第一行是标题行, 所以从第二行开始插入数据
for (int rowIndex = 0; rowIndex < datas.size(); rowIndex++) {
row = sheet.createRow(rowIndex + 1);//从第二行开始
rowDataMap = datas.get(rowIndex);
int columnIndex = 0;
for (String key : rowDataMap.keySet()) {
cell = row.createCell(columnIndex);
columnValue = rowDataMap.get(key);
columnIndex++;
if (columnValue == null) {
continue;
}
if (columnValue instanceof Integer) {
cell.setCellValue((Integer) columnValue);
} else if (columnValue instanceof Long) {
cell.setCellValue((Long) columnValue);
} else {
cell.setCellValue(String.valueOf(columnValue));
}
}
}
}
return sheet;
} /***
* 解析excel并封装成list
*
* @param inputStream
* @return
*/
public static List<Map<String, String>> readExcelandToList(InputStream inputStream) {
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
BufferedInputStream bis = null;
// 获得一个特定的工作薄
try {
bis = new BufferedInputStream(inputStream);
Workbook workbook = WorkbookFactory.create(bis);
// 循环获得每一个sheet(只处理第一个sheet)
for (int numSheets = 0; workbook != null
&& numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (numSheets != 0) {
break;
}
// 获得一个sheet
Sheet sheet = workbook.getSheetAt(numSheets);
if (null == sheet) {
continue;
}
// 循环每一行
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row aRow = sheet.getRow(rowNum);
if (null == aRow) {
continue;
}
Map<String, String> datum = new HashMap<String, String>();
// Map<String, String> datum =new LinkedHashMap<String, String>(); // 循环特定行的每一列
for (short cellNum = 0; cellNum < aRow.getLastCellNum(); cellNum++) {
// 得到特定单元格
Cell aCell = aRow.getCell(cellNum);
if (aCell == null) {
continue;
}
String cellValue = "";
if(aCell != null) {
if(aCell.getCellTypeEnum() == CellType.NUMERIC) {
if(DateUtil.isCellDateFormatted(aCell)) {
cellValue = new DataFormatter().formatCellValue(aCell);
} else {
cellValue = String.valueOf(aCell.getNumericCellValue());
}
} else {
cellValue = aCell.getRichStringCellValue().toString();
}
}
datum.put("cell" + cellNum, cellValue.trim());
}
data.add(datum);
}
} bis.close();
if (inputStream != null) {
inputStream.close();
}
return data;
} catch (Exception e) {
e.printStackTrace();
if (bis != null) {
try {
bis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
try {
throw e;
} catch (Exception e1) {
e1.printStackTrace();
} finally {
return null;
}
}
} /***
* 解析excel并封装成list,Map中包含列名
*
* @param inputStream
* @return
*/
public static List<Map<String, String>> readExcelToList(InputStream inputStream) {
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
BufferedInputStream bis = null;
// 获得一个特定的工作薄
try {
bis = new BufferedInputStream(inputStream);
Workbook workbook = WorkbookFactory.create(bis);
// 循环获得每一个sheet(只处理第一个sheet)
for (int numSheets = 0; workbook != null
&& numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (numSheets != 0) {
break;
}
// 获得一个sheet
Sheet sheet = workbook.getSheetAt(numSheets);
if (null == sheet) {
continue;
}
//得到表头
Row tRow = sheet.getRow(0);
List<String> cellName = new ArrayList<>();
for (short cellNum = 0; cellNum < tRow.getLastCellNum(); cellNum++) {
Cell aCell = tRow.getCell(cellNum);
if (aCell == null) {
continue;
}
aCell.setCellType(Cell.CELL_TYPE_STRING);
String cellValue = (aCell == null ? null : aCell.getRichStringCellValue().toString());
cellName.add(cellValue.trim());
}
// 循环每一行
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row aRow = sheet.getRow(rowNum);
if (null == aRow) {
continue;
}
Map<String, String> datum = new HashMap<String, String>();
// 循环特定行的每一列
for (short cellNum = 0; cellNum < aRow.getLastCellNum(); cellNum++) {
// 得到特定单元格
Cell aCell = aRow.getCell(cellNum);
if (aCell == null) {
continue;
}
aCell.setCellType(Cell.CELL_TYPE_STRING);
String cellValue = (aCell == null ? null : aCell.getRichStringCellValue().toString());
datum.put(cellName.get(cellNum), cellValue.trim());
}
data.add(datum);
}
}
bis.close();
if (inputStream != null) {
inputStream.close();
}
return data;
} catch (Exception e) {
e.printStackTrace();
if (bis != null) {
try {
bis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
try {
throw e;
} catch (Exception e1) {
e1.printStackTrace();
} finally {
return null;
}
}
}
}
poi 导入导出excel的更多相关文章
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- Java POI导入导出Excel
1.异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 解决方法: 使用的poi的相关jar ...
- java中使用poi导入导出excel文件_并自定义日期格式
Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...
- POI导入导出excel(附工具类)
关于POI导出excel的功能我在前面的文章已经写过了,POI导出excel的三种方式 , 导出表格数据到excel并下载(HSSFWorkbook版) ,本篇文章主要是将导入导出功能进一步地封装,在 ...
- POI导入导出Excel(HSSF格式,User Model方式)
1.POI说明 Apache POI是Apache软件基金会的开源代码库, POI提供对Microsoft Office格式档案读和写的功能. POI支持的格式: HSSF - 提供读写Microso ...
- SpringMvc 使用poi导入导出Excel
Util类 package com.common.util; public class ExportUtil { private XSSFWorkbook wb = null; private XSS ...
- java poi 导入导出Excel xsl xslx
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- 导入导出Excel的Java工具类ExcelUtil
在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单 ...
随机推荐
- Git项目协同开发学习笔记1:项目库开发基础git命令
这年头git基本都是项目开发的标配,之前刚好碰到了就花了两天时间系统学习了下.本文内容基本来自以下tutorial:Learn Git(建议直接去看原文,因为这个网站是有更新的).这个是我看过对git ...
- 安卓webview子线程网络请求,怎么获得结果?
向webview注入网络上的js,就需要请求js的url.但不允许在主线程直接发http请求,需要开子线程,开了子线程后,子线程就自己运行,主线程也自己运行,但是我的主线程需要子线程的结果才能继续往下 ...
- Git------如何使用Git Bash Here提交代码
转载:码云帮助文档地址 http://git.mydoc.io/?t=154712 1.打开“Git Bash Here” 2.输入: ssh-keygen -t rsa -C "xxxxx ...
- Java -- 新IO -- 目录
20.1 Java 新IO简介 20.2 缓冲区与Buffer 例:演示缓冲区的操作流程 Class : IntBufferDemo01 20.2.2 深入缓冲区操作 20.2.3 创建子缓冲区 20 ...
- 5 -- Hibernate的基本用法 --4 5 JNDI数据源的连接属性
如果无须Hibernate自己管理数据源,而是直接访问容器管理数据源,Hibernate可使用JNDI(Java Naming Directory Interface,Java命名目录接口)数据源的相 ...
- NetBpm 示例:请假审批(6)
转载注明出处: http://www.cnblogs.com/anbylau2130/p/3877983.html 原文: 请假示例 流程定义包源码下载(注:par包就是zip格式压缩包).原文地址: ...
- 如何在windows上测试iphone?
本教程将会让你没有mac照样测试iphone,这是我折腾了几天总结下来的,希望对大家有用. 先来几张效果图吧 方法很简单,但是配置起来说实话有点麻烦,先在电脑上安装vmware,在安装osx系统,在安 ...
- 高德地图api比例尺
20-10m-(19=<zoom<20) 19-10m-(19=<zoom<20) 18-25m-(18=<zoom<19) 17-50m-(17=<zoom ...
- 【NLP】HanLP环境
1.参考:https://github.com/hankcs/pyhanlp 2.问题: C:\Users\ADMINI~1\AppData\Local\Temp\pip-install-u617cf ...
- scala中隐式转换之隐式值和隐式视图
/** * Created by root * Description : 隐式值和隐式视图 */ object ImplicitTest { def main(args: Array[String] ...