您的位置:首页 > 编程语言 > Java开发

javaweb之动态读取 excel,导入excel

2015-10-09 00:00 549 查看
摘要: javaweb之动态读取 excel,导入excel,poi,jxl

因为项目需求用到excel导入功能,技术有限花了很多时间终于弄出来了。借鉴了别人的方法,分享给有需要的人。

之前在搜索后看了很多人的方法,但是和我实际的需求不符合。

借鉴 http://www.cnblogs.com/gmq/archive/0001/01/01/1521496.html

有什么问题或者改良 可以联系我qq1136533879

为什么不符合呢,都是采用遍历的方法,直接读取表格内容,不取表头,固定列数的。

File file = new File(path);
getData(file, 0); //path是路径,


正文代码

/**

* http://www.cnblogs.com/gmq/archive/0001/01/01/1521496.html *
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 循环标题的数组
*
* @param file
*            读取数据的源Excel
* @param ignoreRows
*            读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/

public String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List<String[]> result = new ArrayList<String[]>();
int rowSize = 0;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file));

// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFCell cell = null;
String[] bt;
// 根据不同的data放置不同的表头
Map<Object, Object> headMap = new HashMap<Object, Object>();

for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {

HSSFSheet st = wb.getSheetAt(sheetIndex);// 不取0行 表头
// 第一行为标题,不取
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 不算标题  的行数   st.getLastRowNum()不算表头的数目
HSSFRow row = st.getRow(rowIndex);

if (row == null) {
continue;
}
addressList = new AddressList();
boolean _b = false;
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { // 循环列
cell = row.getCell(columnIndex);
if (cell != null) {
String value = cell.toString().trim();
if (rowIndex == 0) {
if (value.toString().equals("姓名")) {
headMap.put(columnIndex, "name");
}else if (value.toString().equals("职务")) {
headMap.put(columnIndex, "zhiwu");
}
else if (value.toString().equals("办公室电话")) {
headMap.put(columnIndex, "oph");
} else if (value.toString().equals("手机号码")) {
headMap.put(columnIndex, "tel");
} else if (value.toString().equals("传真")) {
headMap.put(columnIndex, "fax");
} else if (value.toString().equals("邮箱")) {
headMap.put(columnIndex, "emall");
}
else if (value.toString().equals("生日")) {
headMap.put(columnIndex, "birthday");
}
else if (value.toString().equals("地址")) {
headMap.put(columnIndex, "address");
} else if (value.toString().equals("说明")) {
headMap.put(columnIndex, "comments");
} else if (value.toString().equals("性别")) {
headMap.put(columnIndex, "sex");
}

} else {
if (headMap.get(columnIndex) != null) {
String _value = headMap.get(columnIndex)
.toString();
if (_value.equals("name")) {
_b = true;
addressList.setName(value);
}else if (_value.equals("zhiwu")) {
_b = true;
String abc = jdbc.GetObject("select id from Code where codeName like '"+value+"'", "id");
addressList.setZhiwu(Integer.parseInt(abc));
}
else if (_value.equals("oph")) {
_b = true;
addressList.setOph(value);
} else if (_value.equals("tel")) {
_b = true;
addressList.setTel(value);
} else if (_value.equals("fax")) {
_b = true;
addressList.setFax(value);
} else if (_value.equals("emall")) {
_b = true;
addressList.setEmall(value);
} else if (_value.equals("sex")) {
_b = true;
if (value.toString().equals("男")) {
value = "0";
} else {
value = "1";
}
addressList.setSex(Integer.parseInt(value));
} else if (_value.equals("birthday")) {
_b = true;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(value);
addressList.setBirthday(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (_value.equals("address")) {
_b = true;
addressList.setAddress(value);
}
else if (headMap.get(columnIndex).toString()
.equals("comments")) {
_b = true;
addressList.setComments(value);
}

}
}
}

}
if (_b) {
addressList.setPid(pid);
addressList.setType(type);
addressList.setUserid(userid);
addressList.setSort(0);
addressListService.save(addressList);
}

}

}
in.close();
String[][] returnArray = new String[result.size()][rowSize];
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = (String[]) result.get(i);
}
return returnArray;
}

/**
* 去掉字符串右边的空格
*
* @param str
*            要处理的字符串
* @return 处理后的字符串
*/
public static String rightTrim(String str) {
if (str == null) {
return "";
}
int length = str.length();
for (int i = length - 1; i >= 0; i--) {
if (str.charAt(i) != 0x20) {
break;
}
length--;
}
return str.substring(0, length);
}


addressList 是我类。

第二种导入方法 这个比较的固定

private List<List<Object>> kydru(String file) throws IOException {
List<List<Object>> list = new LinkedList<List<Object>>();
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
// 读取第一张表格内容
XSSFSheet sheet = xwb.getSheetAt(0);
// Object value = null;
XSSFRow row = null;
XSSFCell cell = null;
for (int i = (sheet.getFirstRowNum() + 1); i <= (sheet
.getPhysicalNumberOfRows() - 1); i++) {
String value = "";
row = sheet.getRow(i);// row是行号
if (row == null) {
continue;
}
//
List<Object> linked = new LinkedList<Object>();
AddressList addressList = new AddressList();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) { // cell是列 1 2
value = "";
} else {
DecimalFormat df = new DecimalFormat("0");// 格式化 number
// String字符
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
String shu = df.format(cell.getNumericCellValue()); // 将科学计数的转换
value = shu;
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue() + ",";
break;
case XSSFCell.CELL_TYPE_BLANK:
value = "";
break;
default:
value = cell.toString();
}
}

switch (j) {
case 0: // 名字为空就停止循环
addressList.setName(value);
break;

case 1:// 电话为空就停止循环
addressList.setTel(value);
break;

case 2:
addressList.setEmall(value);
break;
case 3:
addressList.setFax(value);
break;
case 4:
addressList.setRoomnum(value);
break;
case 5:
addressList.setOph(value);
break;
case 6:
addressList.setAddress(value);
break;
case 7:
addressList.setComments(value);
break;
case 8:
try {
addressList.setSort(Integer.parseInt(value));
} catch (Exception e) {
continue;
// TODO Auto-generated catch block
}
break;
default:
break;
}
String[] val = value.split(",");
System.out.println(value);
}

addressList.setPid(pid);
addressList.setUserid(userid);
addressList.setType(type);
addressList.setSex(0);
addressListService.save(addressList);
list.add(linked);
String[] val2 = value.split(",");
System.out.println(val2);
}

return list;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: