本文目录一览:
如何提高poi读写excel文件(同一文件)的效率
我的代码
// 导入普通客户信息
public String importExcle() {
TEmployee employee = (TEmployee) request.getSession().getAttribute(
"employee");
TCustomerInfo c = new TCustomerInfo();
// 声明数据流
InputStream is = null;
if (employee != null) {
int hang = 0;
int lie = 0;
if (excel != null) {
try {
// 解析excel 2007 版本文件
is = new FileInputStream(excel);
XSSFWorkbook work = new XSSFWorkbook(is);
XSSFSheet sheet = work.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
// 循环表的行,从第二行开始
for (int i = 1; i rows; i++) {
hang = i + 1;
c = new TCustomerInfo();
XSSFRow row = sheet.getRow(i);
if (row == null) {// 判断是否为空
continue;
}
// 读取该行的每一列
for (int j = 0; j row.getPhysicalNumberOfCells(); j++) {
XSSFCell cell = row.getCell(j);
if (cell == null) {
continue;
}
if (cell.toString() == null
"".equals(cell.toString())) {
continue;
}
String v = Util.getXssfCellValue(cell);
switch (j) {// 通过列数来判断对应插如的字段
case 0:
c.setCompanyName(v);
break;
case 1:
c.setLinkName(v);
break;
case 2:
c.setTell(v);
break;
case 3:
c.setTelephone(v);
break;
case 4:
c.setPosition(v);
break;
case 5:
c.setEmail(v);
break;
case 6:
c.setCompanyType(v);
break;
case 7:
c.setCustomerType(v);
break;
case 8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(employee.getName());
c.setCreateDate(new Date());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message", "导入成功(=^_^=)");
} catch (Exception e) {
System.out.println("进入 ---解析excel 2003 版本文件--错误抛出");
try {
// 解析excel 2003 版本文件
is = new FileInputStream(excel);
HSSFWorkbook work = new HSSFWorkbook(is);
HSSFSheet sheet = work.getSheetAt(0);
if (sheet != null) {
int rows = sheet.getPhysicalNumberOfRows();
// 循环表的行,从第二行开始
for (int i = 1; i rows; i++) {
hang = i + 1;
c = new TCustomerInfo();
HSSFRow row = sheet.getRow(i);
if (row == null) {// 判断是否为空
continue;
}
// 循环表格的列
for (short j = 0; j row
.getPhysicalNumberOfCells(); j++) {
HSSFCell cell = row.getCell(j);
if (cell == null) {
continue;
}
if (cell.toString() == null|| "".equals(cell.toString())) {
continue;
}
String v = Util.getHssfCellValue(cell);
switch (j) {// 通过列数来判断对应插如的字段
case 0:
c.setCompanyName(v);
break;
case 1:
c.setLinkName(v);
break;
case 2:
c.setTell(v);
break;
case 3:
c.setTelephone(v);
break;
case 4:
c.setPosition(v);
break;
case 5:
c.setEmail(v);
break;
case 6:
c.setCompanyType(v);
break;
case 7:
c.setCustomerType(v);
break;
case 8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(v);
c.setCreateDate(new Date());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message", "导入成功(=^_^=)");
}
} catch (Exception e1) {
request.setAttribute("message", "第" + hang + "行,第"
+ lie + "列开始导入失败,请注意导入格式!!");
e1.printStackTrace();
}
}
}
} else {
request.setAttribute("message", "登录超时 ,请重新登录!!");
}
// 查询时对象中含有值对查询有误
if (customer != null) {
customer = null;
}
return customerList();
}
POI 读取excel
直接上源码:
package edu.sjtu.erplab.poi;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
* 操作Excel表格的功能类
*/
public class ExcelReader {
private POIFSFileSystem fs;
private HSSFWorkbook wb;
private HSSFSheet sheet;
private HSSFRow row;
/**
* 读取Excel表格表头的内容
* @param InputStream
* @return String 表头内容的数组
*/
public String[] readExcelTitle(InputStream is) {
try {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// 标题总列数
int colNum = row.getPhysicalNumberOfCells();
System.out.println("colNum:" + colNum);
String[] title = new String[colNum];
for (int i = 0; i colNum; i++) {
//title[i] = getStringCellValue(row.getCell((short) i));
title[i] = getCellFormatValue(row.getCell((short) i));
}
return title;
}
/**
* 读取Excel数据内容
* @param InputStream
* @return Map 包含单元格数据内容的Map对象
*/
public MapInteger, String readExcelContent(InputStream is) {
MapInteger, String content = new HashMapInteger, String();
String str = "";
try {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i = rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
while (j colNum) {
// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
str += getCellFormatValue(row.getCell((short) j)).trim() + " ";
j++;
}
content.put(i, str);
str = "";
}
return content;
}
/**
* 获取单元格数据内容为字符串类型的数据
*
* @param cell Excel单元格
* @return String 单元格数据内容
*/
private String getStringCellValue(HSSFCell cell) {
String strCell = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
strCell = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
if (strCell.equals("") || strCell == null) {
return "";
}
if (cell == null) {
return "";
}
return strCell;
}
/**
* 获取单元格数据内容为日期类型的数据
*
* @param cell
* Excel单元格
* @return String 单元格数据内容
*/
private String getDateCellValue(HSSFCell cell) {
String result = "";
try {
int cellType = cell.getCellType();
if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
Date date = cell.getDateCellValue();
result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
+ "-" + date.getDate();
} else if (cellType == HSSFCell.CELL_TYPE_STRING) {
String date = getStringCellValue(cell);
result = date.replaceAll("[年月]", "-").replace("日", "").trim();
} else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
result = "";
}
} catch (Exception e) {
System.out.println("日期格式不正确!");
e.printStackTrace();
}
return result;
}
/**
* 根据HSSFCell类型设置数据
* @param cell
* @return
*/
private String getCellFormatValue(HSSFCell cell) {
String cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case HSSFCell.CELL_TYPE_NUMERIC:
case HSSFCell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式
//方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
//cellvalue = cell.getDateCellValue().toLocaleString();
//方法2:这样子的data格式是不带带时分秒的:2011-10-12
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cellvalue = sdf.format(date);
}
// 如果是纯数字
else {
// 取得当前Cell的数值
cellvalue = String.valueOf(cell.getNumericCellValue());
}
break;
}
// 如果当前Cell的Type为STRIN
case HSSFCell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
// 默认的Cell值
default:
cellvalue = " ";
}
} else {
cellvalue = "";
}
return cellvalue;
}
public static void main(String[] args) {
try {
// 对读取Excel表格标题测试
InputStream is = new FileInputStream("d://test2.xls");
ExcelReader excelReader = new ExcelReader();
String[] title = excelReader.readExcelTitle(is);
System.out.println("获得Excel表格的标题:");
for (String s : title) {
System.out.print(s + " ");
}
// 对读取Excel表格内容测试
InputStream is2 = new FileInputStream("d://test2.xls");
MapInteger, String map = excelReader.readExcelContent(is2);
System.out.println("获得Excel表格的内容:");
for (int i = 1; i = map.size(); i++) {
System.out.println(map.get(i));
}
} catch (FileNotFoundException e) {
System.out.println("未找到指定路径的文件!");
e.printStackTrace();
}
}
}
使用poi包读写excel需要导入哪几个jar包
需要导入哪个jar包主要是你用到了哪些功能,poi-3.8-**这个是最基本的,其他的你可以根据具体需要来导入。因为不知道你具体要实现的功能,教你使用jar报的方法吧!1.最简单的方法-全部导入。2、首先看官方文档或者实例,找到代码,如果代码报错就引入相应的jar包,代码不报错了,就运行,如果报classNotFound,就根据class找相应的jar包了。3.看官方介绍,看看每个包是干嘛的,就可以根据你的功能取需要的了。