poi 导入导出

参考:
--POI各Jar包的作用
[url]http://blog.csdn.net/szwangdf/article/details/39053859[/url]
[url]https://www.cnblogs.com/wangqc/p/poi.html[/url]
[url]https://www.cnblogs.com/zhangchengbing/p/6340036.html[/url]

--导入导出原理或代码参考
[url]http://blog.csdn.net/houxuehan/article/details/50960259[/url]
[url]http://blog.csdn.net/u013871100/article/details/52901996[/url]
[url]http://wanghongxu.iteye.com/blog/1879893[/url]
[url]http://yl-fighting.iteye.com/blog/1726285[/url]
[url]https://www.cnblogs.com/stono/p/6713158.html[/url]
[url]http://blog.csdn.net/johnstrive/article/details/8393541[/url]
[url]https://www.cnblogs.com/zhuixun/p/6600331.html[/url]
[url]http://blog.csdn.net/aqsunkai/article/details/52270198[/url]
--POI 通用导出Excel(.xls,.xlsx)
[url]http://blog.csdn.net/houxuehan/article/details/50960259[/url]
--java, poi 取消科学计数法
[url]http://blog.csdn.net/this_super/article/details/6766139[/url]
--POI读取excel单元格,获取单元格各类型值,返回字符串类型
[url]https://www.cnblogs.com/zy2009/p/6759933.html[/url]
--POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
[url]http://blog.csdn.net/frist_huangsuli/article/details/7701446[/url]


demo

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.util.NumberToTextConverter;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
* poi导入导出excel文件工具类
*/
public class PoiUtils {
/**
* 1、需要导入的jar poi组件--文件格式--需要引入的jar HSSF Excel XLS poi HSSF是POI工程对Excel
* 97(-2007)文件操作的纯Java实现 XSSF Excel XLSX poi-ooxml XSSF是POI工程对Excel 2007
* OOXML (.xlsx)文件操作的纯Java实现 Common SS Excel XLS and XLSX poi-ooxml
* 2、需要考虑的问题 excel文件格式:xls和xlsx excel文件的行数量:少数量、多数量
*/
private static final Log logger = LogFactory.getLog(PoiUtils.class);

public static void main(String[] args) {
File file=new File("D:\\测试数据222.xlsx");
FileInputStream fileInputStream=null;
try {
fileInputStream=new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
readExcelFileDta2List(fileInputStream, ".xlsx", 1);

}


/**
* 以字符串的形式获取单元格的值
* @param cell
* @return
*/
private static String getCellStringValue(Cell cell) {
/**
* CellType 类型 值 CELL_TYPE_NUMERIC 数值型 0 CELL_TYPE_STRING 字符串型 1
* CELL_TYPE_FORMULA 公式型 2 CELL_TYPE_BLANK 空值 3 CELL_TYPE_BOOLEAN 布尔型 4
* CELL_TYPE_ERROR 错误 5
*/
if (null == cell) {
return "";
}
String result = "";
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:// String类型
result = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:// 数字类型
result = NumberToTextConverter.toText(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:// 布尔值
result = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:// 公式
result = cell.getCellFormula();
break;
case Cell.CELL_TYPE_BLANK:// 空格
result = "";
break;
default: // 其它 CELL_TYPE_ERROR
result = "";
break;
}
return result;
}

/**
* 解析导入数据的文件流
*
* @param inputStream
* @param suffix 如".xls"或".xlsx"
* @param startRowIndex
* @return
*/
public static List<String[]> readExcelFileDta2List(InputStream inputStream, String suffix, int startRowIndex) {
Workbook workbook = null;
if (ExcelCommonEnum.SUFFIX_XLS.getValue().equals(suffix)) {
// excel文件名的后缀是“.xls”
try {
// HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现
workbook = new HSSFWorkbook(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
} else if (ExcelCommonEnum.SUFFIX_XLSX.getValue().equals(suffix)) {
// excel文件名的后缀是“.xlsx”
try {
// XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现
workbook = new XSSFWorkbook(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
Sheet sheet = workbook.getSheetAt(0);
if (sheet == null) {
return null;
}
ArrayList<String[]> list = new ArrayList<String[]>();
int lastRowNum = sheet.getLastRowNum(); // 最大行数
Row titleRow = sheet.getRow(0);//标题行,用于定义String[]长度
for (int rowNum = startRowIndex; rowNum <= lastRowNum; rowNum++) {
if (null != sheet.getRow(rowNum)) {
Row row = sheet.getRow(rowNum);// 取第rowNum行为当前遍历行
short firstCellNum = row.getFirstCellNum();// 0
short lastCellNum = row.getLastCellNum();// 当前行的最大列数
if (firstCellNum != lastCellNum) {
// 如果列数不为0,即sheet不为空
String[] values = new String[titleRow.getLastCellNum()];// 定义一个以当前行最大列数为长度的字符串数组
for (int cellNum = firstCellNum; cellNum < titleRow.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (null == cell) {
values[cellNum] = ExcelCommonEnum.NULL.getValue();
} else {
String cellValue=getCellStringValue(cell);// 获取单元格的值
values[cellNum] = StringUtils.isNotBlank(cellValue)?cellValue.trim():ExcelCommonEnum.NULL.getValue();
}
}
list.add(values);
}
}
}
return list;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值