日常工作中,解析xls数据到数据库,或者从数据库导出数据到xls,本问介绍如何直接使用pol来完成次需求,
需要导入apache pol工具包,下载地址
代码如下:
package com.xlsx;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
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.xssf.usermodel.XSSFWorkbook;
import com.bjsxt.strategy.NewCustomerFewStrategy;
/**
* 导入到出xls文件
*
* @author Administrator
*
*/
public class XlsxUtils {
public static void main(String[] args) {
List<List<String>> lists = new ArrayList<>();
for(int k = 0;k<10;k++){
List list = new ArrayList<String>();
for(int i = 0 ;i<10;i++){
list.add("第"+k+"行,第"+i+"列");
}
lists.add(list);
}
creatXls(lists,"D:\\TestFile\\aaaaa");
analyzeXls("D:\\TestFile\\aaaaa.xls");
}
/**
*
* @param lists
* 需要放数据的集合,最外层表示行,里面的list表示一行应该有几个数据
* @param src
* 完成数据写入之后文件存放位置
*/
public static void creatXls(List<List<String>> lists, String src) {
// 创建一个工作薄
Workbook workbook = new HSSFWorkbook();
// 创建一个sheet
Sheet sheet = workbook.createSheet("sheet");
// 创建行
for (int i = 0; i < lists.size(); i++) {
Row row = sheet.createRow(i);
// 获取每一行的循环
List<String> listRow = lists.get(i);
for (int k = 0; k < listRow.size(); k++) {
row.createCell(k).setCellValue("第" + i + "行第" + k + "列的值应该为:" + listRow.get(k));
}
}
try {
// 创建文件后缀
FileOutputStream f = new FileOutputStream(src + ".xls");
// 内容一次性写入文件
workbook.write(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 推荐使用这样的,一般来讲,一个map对象和数据库的一行数据对应
*
* @param LisMap
* 数据集合
* @param src
* 路径
*/
public void creatXlsForMap(List<Map<String, String>> LisMap, String src) {
// 创建一个工作薄
Workbook workbook = new HSSFWorkbook();
// 创建一个sheet
Sheet sheet = workbook.createSheet("sheet");
// 创建行
for (int i = 0; i < LisMap.size(); i++) {
Row row = sheet.createRow(i);
// 获取每一行的循环
Map<String, String> listRow = LisMap.get(i);
for (String key : listRow.keySet()) {
int k = 0;
row.createCell(k).setCellValue("第" + i + "行第" + k + "列的值应该为:" + listRow.get(key));
k++;
}
}
try {
// 创建文件后缀
FileOutputStream f = new FileOutputStream(src + ".xls");
// 内容一次性写入文件
workbook.write(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 解析xls文件
*
* @param src
*/
public static void analyzeXls(String src) {
Workbook workbook = getWork(src);
// 循环每一个工作薄
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
// 获取每一个工作薄
Sheet sheet = workbook.getSheetAt(i);
// 获取所有行数
int countRow = sheet.getLastRowNum();
// 如果第一行是标题,那么从1循环,如果第一行也是数据,则从0开始循环
for (int rowNub = 1; rowNub < countRow; rowNub++) {
// 获取每一行
Row row = sheet.getRow(rowNub);
// 获取行有几个单元格
int nub = row.getLastCellNum();
for (int k = 0; k < nub; k++) {
Cell cell = row.getCell(k);
System.out.println(getCellValue(cell));
}
}
}
}
/**
*
*
* @param cell
* @return 根据cell的类型,返回cell的值
*/
public static String getCellValue(Cell cell) {
String cellValue = "";
if (cell == null) {
return cellValue;
}
// 把数字当成String来读,避免出现1读成1.0的情况
if (cell.getCellType() == CellType.NUMERIC) {
cell.setCellType(CellType.STRING);
}
// 判断数据的类型
switch (cell.getCellType()) {
case NUMERIC: // 数字
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case STRING: // 字符串
cellValue = String.valueOf(cell.getStringCellValue());
break;
case BOOLEAN: // Boolean
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA: // 公式
cellValue = String.valueOf(cell.getCellFormula());
break;
case BLANK: // 空值
cellValue = "";
break;
case ERROR: // 故障
cellValue = "Error";
break;
default:
cellValue = "default";
break;
}
return cellValue;
}
/**
* 获取 work对象
*
* @param src
* 文件路径
*
*/
public static Workbook getWork(String src) {
try {
Workbook workbook = null;
FileInputStream file = new FileInputStream(src);
String fileType = src.split("\\.")[1];
// 根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
if (fileType.endsWith("xls")) {
// 2003
workbook = new HSSFWorkbook(file);
} else if (fileType.endsWith("xlsx")) {
// 2007
workbook = new XSSFWorkbook(file);
}
return workbook;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}