poi 导入/导出 工具类
package com.holy.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelExporterOrImp {
/**
* 导出数据
* @param os
* @param data
* @throws IOException
*/
public static void exportToExcel(OutputStream os, List<List<String>> data) throws IOException {
HSSFWorkbook wb=null;
try {
wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Data"); for (int r = 0 ; r < data.size() ; r++) {
HSSFRow row = sheet.createRow(r); List<String> cols = data.get(r);
for (int c = 0 ; c < cols.size() ; c++) {
HSSFCell cell = row.createCell(c);
cell.setCellValue(new HSSFRichTextString(cols.get(c)));
}
} } catch (Exception e) { e.printStackTrace();
}finally{
if(wb!=null){
wb.write(os);
}
os.flush();
os.close();
}
}
/**
* 数据导入
* @param is
* @return
* @throws IOException
*/
public static List<List<String>> importFromExcel(InputStream is) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<List<String>> data = new ArrayList<List<String>>();
try {
for (int r = sheet.getFirstRowNum() ; r <= sheet.getLastRowNum() ; r++) {
HSSFRow row = sheet.getRow(r);
if (row == null) {
continue;
} List<String> cols = new ArrayList<String>();
for (int c = row.getFirstCellNum() ; c < row.getLastCellNum() ; c++) {
HSSFCell cell = row.getCell(c);
if (cell == null) {
cols.add("");
} else {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cols.add(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cols.add(""+cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
cols.add(sdf.format(cell.getDateCellValue()));
} else {
cols.add(""+cell.getNumericCellValue());
} break;
case HSSFCell.CELL_TYPE_FORMULA:
cols.add(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
cols.add("");
break;
}
}
} data.add(cols);
}
} finally {
is.close();
}
return data;
}
/**
*
* @param is
* @param firstCellNum
* @param lastCellNum
* @return
* @throws IOException
*/
public static List<List<String>> importFromExcelWithCell(InputStream is,int firstCellNum,int lastCellNum) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<List<String>> data = new ArrayList<List<String>>();
try {
for (int r = sheet.getFirstRowNum() ; r <= sheet.getLastRowNum() ; r++) {
HSSFRow row = sheet.getRow(r);
if (row == null) {
continue;
} List<String> cols = new ArrayList<String>();
for (int c = firstCellNum ; c < lastCellNum ; c++) {
HSSFCell cell = row.getCell(c);
if (cell == null) {
cols.add("");
} else {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cols.add(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cols.add(""+cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
cols.add(sdf.format(cell.getDateCellValue()));
} else {
cols.add(""+cell.getNumericCellValue());
} break;
case HSSFCell.CELL_TYPE_FORMULA:
cols.add(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
cols.add("");
break;
}
}
} data.add(cols);
}
} finally {
is.close();
}
return data;
}
/**
* 该方法把num类型强转成了string
* @param is
* @param firstCellNum
* @param lastCellNum
* @return
* @throws IOException
*/
public static List<List<String>> importFromExcelWithCellWithNUm(InputStream is,int firstCellNum,int lastCellNum) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DecimalFormat df = new DecimalFormat("#");
List<List<String>> data = new ArrayList<List<String>>();
try {
for (int r = sheet.getFirstRowNum() ; r <= sheet.getLastRowNum() ; r++) {
HSSFRow row = sheet.getRow(r);
if (row == null) {
continue;
} List<String> cols = new ArrayList<String>();
for (int c = firstCellNum ; c < lastCellNum ; c++) {
HSSFCell cell = row.getCell(c);
if (cell == null) {
cols.add("");
} else {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cols.add(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cols.add(""+cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
cols.add(sdf.format(cell.getDateCellValue()));
} else { cols.add( ""+df.format(cell.getNumericCellValue()));
// cols.add(""+cell.getNumericCellValue());
} break;
case HSSFCell.CELL_TYPE_FORMULA:
cols.add(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
cols.add("");
break;
}
}
} data.add(cols);
}
} finally {
is.close();
}
return data;
} /***
* 该方法把导入excel时对于数字类型的数据进行处理
* 一般情况下excel中数字太长会转化成科学计数法
* @param is
* @return
* @throws IOException
*/
public static List<List<String>> importExcelWithCellWithNum(InputStream is) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DecimalFormat df = new DecimalFormat("#");
List<List<String>> data = new ArrayList<List<String>>();
try {
for (int r = sheet.getFirstRowNum() ; r <= sheet.getLastRowNum() ; r++) {
HSSFRow row = sheet.getRow(r);
if (row == null) {
continue;
} List<String> cols = new ArrayList<String>();
for (int c = row.getFirstCellNum() ; c < row.getLastCellNum() ; c++) {
HSSFCell cell = row.getCell(c);
if (cell == null) {
cols.add("");
} else {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cols.add(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cols.add(""+cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
cols.add(sdf.format(cell.getDateCellValue()));
} else {
cols.add( ""+df.format(cell.getNumericCellValue()));
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
cols.add(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
cols.add("");
break;
}
}
} data.add(cols);
}
} finally {
is.close();
}
return data;
} public static List<List<String>> importExcelWithNullCell(InputStream is) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DecimalFormat df = new DecimalFormat("#");
List<List<String>> data = new ArrayList<List<String>>(); try {
int lastCellNum = sheet.getRow(sheet.getFirstRowNum()).getLastCellNum(); for (int r = sheet.getFirstRowNum() ; r <= sheet.getLastRowNum() ; r++) {
HSSFRow row = sheet.getRow(r);
if (row == null) {
continue;
} List<String> cols = new ArrayList<String>();
for (int c = 0 ; c < lastCellNum ; c++) {
HSSFCell cell = row.getCell(c);
if (cell == null) {
cols.add("");
} else {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cols.add(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cols.add(""+cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
cols.add(sdf.format(cell.getDateCellValue()));
} else {
cols.add( ""+df.format(cell.getNumericCellValue()));
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
cols.add(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BLANK:
cols.add("");
break;
}
}
} data.add(cols);
}
} finally {
is.close();
}
return data;
} public static void main(String[] args) throws IOException { FileOutputStream os = new FileOutputStream(new File("d:/test.xls"));
List<List<String>> data = new ArrayList<List<String>>();
List<String> s = new ArrayList<String>();
s.add("11");
s.add("22");
s.add("33");
data.add(s);
List<String> s1 = new ArrayList<String>();
s1.add("11");
s1.add("22");
s1.add("33");
data.add(s1);
exportToExcel(os, data);
System.out.println("data:"+data); // FileInputStream is = new FileInputStream(new File("d:/bank.xlsx"));
// List<List<String>> data = importFromExcel(is);
// System.out.println("data:"+data);
} }
poi 导入/导出 工具类的更多相关文章
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- Java基础学习总结(49)——Excel导入导出工具类
在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...
- java中excel导入\导出工具类
1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- 使用回调方式写POI导入excel工具类
场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西 ...
- java Excel导入导出工具类
本文章,导入导出依赖提前定义好的模板 package com.shareworx.yjwy.utils; import java.io.File; import java.io.FileInputSt ...
- java word导入导出工具类
package com.shareworx.yjwy.utils; import java.io.InputStream; import java.util.HashMap; import java. ...
- java简易excel导入导出工具(封装POI)
Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...
- Octopus——excel导入导出工具
Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...
随机推荐
- seg格式文件的分析
s ,r, c1, c2 第r行的c1列到 c2列的值为s
- Web---myAjax(自己写底层)-隐藏帧技术
讲解网站一般都有的一个功能,就是注册时候的,实现验证用户名是否存在的功能. 源代码演示: reg.jsp: <%@ page language="java" import=& ...
- HNU 13375 Flowery Trails (spfa最短路)
求最短路径覆盖的全部边权值和. 思路:分别从起点和终点两次求最短路,再比较两个点到起点的距离和他们之间的权值相加和是否等于最短路径. 这题很好 #include <cstring> #in ...
- Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
Order by 与SQL语法类似类似,默认为升序排列; 注意: 如果order by的子句中出现了聚合函数,那么该聚合函数必须出现在select的子句中. 出现在select中的expression ...
- oracle 表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。
今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子.今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记. 对于oracle数据库最小i/0单位是数据块,最想分配空间单 ...
- JavaWeb国际化
软件的国际化: 软件在不同的地方,适应不同的风格: 中国: 显示中文,以及服务符合中国习惯的文本字符串! 美国: 显示英文,以及服务符合他国习惯的文本字符串! 这种软件,就叫国际化的软件! 如何做到国 ...
- 重要常用的Lunix命令
lunix 命令大全: http://man.linuxde.net/ 复制文件/文件夹 复制到本地 文件夹:scp -r work@www.abc.com:/home/work/project / ...
- xcode6 自定义UITabbarController
-(void)initTabBarView{ if (tabBarController && [kAPPDELEGATE.navigationController.viewContro ...
- Visual C++ 2012/2013的内存溢出检測工具
在过去,每次编写C/C++程序的时候,VLD差点儿是我的标配.有了它,就能够放心地敲代码,随时发现内存溢出. VLD最高可支持到Visual Studio 2012.不知道以后会不会支持Visual ...
- Android多线程研究(4)——从一道面试题说起
有一道这种面试题:开启一个子线程和主线程同一时候运行,子线程输出10次后接着主线程输出100次,如此重复50次.先看以下代码: package com.maso.test; /** * * @auth ...