您的位置:首页 > 其它

POI操作excel

2015-09-22 10:11 274 查看
java操作excel是很常见的,那么下面给出一些代码来操作excel表

首先是写

/**
* 根据一个从数据库中查出的集合,把它写成excel
* @param db
*/
public void writerExcel(List<BusinessExtrac> db,String filePath){
try{
String[] key = {"ID","商家","提现金额","提现时间","开户省份","开户城市","开户支行","开户人","银行卡号","提现状态"};
File file = new File(filePath);
if(!file.exists()){
file.createNewFile();
}
XSSFWorkbook book = new XSSFWorkbook();
XSSFSheet sheet = book.createSheet("商家提现");
XSSFCell cell = null;
//锁定表头,这样表头就会固定在最上方,第一个参数是列,第二个参数是行,这里固定了两行
sheet.createFreezePane(0, 2);

//设置第二列的宽度,也就是商家列的宽度
sheet.setColumnWidth(1, 8000);
//设置第三列的宽度
sheet.setColumnWidth(2, 4000);
//设置第四列的宽度,也就是提现时间
sheet.setColumnWidth(3, 8000);
sheet.setColumnWidth(4, 3000);
sheet.setColumnWidth(5, 3000);
sheet.setColumnWidth(6, 3000);
sheet.setColumnWidth(7, 3000);
//设置第五列的宽度,也就是银行卡号
sheet.setColumnWidth(8, 7000);
//审核状态
sheet.setColumnWidth(9, 3000);
//设置第一列,把id列隐藏
sheet.setColumnHidden(0, true);
//合并第一列的单元格
sheet.addMergedRegion(new CellRangeAddress(0,0,0,9));
XSSFRow title = sheet.createRow(0);
//设置第一行的行高
title.setHeightInPoints(70);

XSSFCell tc = title.createCell(0);
tc.setCellStyle(this.getTitleStyle(book));
tc.setCellValue("绿色区域外的内容只作提示,请不要更改,绿色区域内容只允许填写两个值,请不要写其它值(1 为提现失败,2为提现成功,无论您填写什么值,都请确保财务部门正确处理)");

//标题栏
XSSFRow row = sheet.createRow(1);
//填写key
for(int i=0;i<key.length;i++){
cell = row.createCell(i);
cell.setCellValue(key[i]);
cell.setCellStyle(this.getKeyStyle(book));
}
//填写value
for(int i=0;i<db.size();i++){
row = sheet.createRow(i+2);
BusinessExtrac extrac = db.get(i);
//数据库id
cell = row.createCell(0);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getId());
//商家名字
cell = row.createCell(1);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getBusinessName());
//提现金额
cell = row.createCell(2);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getExtrac_money());
//提现时间
cell = row.createCell(3);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(DateUtils.formatDateByFormat(extrac.getExtrac_time(), "yyyy-MM-dd HH:mm:ss"));
//开户省
cell = row.createCell(4);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getBankProvince());
//开户城市
cell = row.createCell(5);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getBankCity());
//开户支行
cell = row.createCell(6);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getBankChildName());
//开户人
cell = row.createCell(7);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getAccountUser());
//银行卡号
cell = row.createCell(8);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(EncryptionUtils.decrypt(extrac.getBank_card_no(), EncryptionUtils.backkey));
//审核状态
cell = row.createCell(9);
cell.setCellStyle(this.getBorderStyle(book));
cell.setCellValue(extrac.getExtrac_status().toString());
cell.setCellStyle(this.getStatusStyle(book));
}
book.write(new FileOutputStream(file));
book.close();
}catch(IOException e){
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 得到审核状态的默认样式
* @return
*/
public XSSFCellStyle getStatusStyle(XSSFWorkbook book){
XSSFCellStyle style = book.createCellStyle();
style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
//        style.setFillBackgroundColor((short)13);
style.setFillForegroundColor(IndexedColors.GREEN.index);
style.setBorderTop(XSSFCellStyle.BORDER_THIN);
style.setBorderRight(XSSFCellStyle.BORDER_THIN);
style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
return style;
}

/**
* 得到标题样式
* @param style
* @return
*/
public XSSFCellStyle getTitleStyle(XSSFWorkbook book){
XSSFCellStyle style = book.createCellStyle();
style.setBorderTop(XSSFCellStyle.BORDER_THIN);
style.setBorderRight(XSSFCellStyle.BORDER_THIN);
style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
//自动换行
style.setWrapText(true);
//字体
XSSFFont font = book.createFont();
font.setFontHeightInPoints((short)16);
font.setColor(IndexedColors.RED.index);
style.setFont(font);
return style;
}
/**
* 得到key的样式
* @param book
* @return
*/
public XSSFCellStyle getKeyStyle(XSSFWorkbook book){
XSSFCellStyle style = book.createCellStyle();
style.setBorderTop(XSSFCellStyle.BORDER_THIN);
style.setBorderRight(XSSFCellStyle.BORDER_THIN);
style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
//字体
XSSFFont font = book.createFont();
font.setColor(IndexedColors.BLUE.index);
font.setFontHeightInPoints((short)15);
style.setFont(font);
return style;
}
/**
* 得到边框的样式
* @param book
* @return
*/
public XSSFCellStyle getBorderStyle(XSSFWorkbook book){
XSSFCellStyle style = book.createCellStyle();
style.setBorderTop(XSSFCellStyle.BORDER_THIN);
style.setBorderRight(XSSFCellStyle.BORDER_THIN);
style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
return style;
}


再接下来是读:

public int uploadExcel(MultipartFile excel,String tempPath) throws IOException {
//判断文件是否有上传
String fileName = excel.getOriginalFilename();
if(fileName == null || fileName.trim().equals("")){
return -1;
}

//把文件保存在临时目录,但是操作完之后要删除这个文件
UploadUtil.saveFileByPath(excel, tempPath);

XSSFWorkbook book = new XSSFWorkbook(tempPath);
XSSFSheet sheet = book.getSheetAt(0);
//得到共有多少行
int rowNum = sheet.getLastRowNum();

List<BusinessExtrac> list = new ArrayList<BusinessExtrac>();

for(int i=2;i<=rowNum;i++){
BusinessExtrac extrac = new BusinessExtrac();
XSSFRow row = sheet.getRow(i);
//id
String is = cellStringUtil(row.getCell(0)).toString();
double log = Double.parseDouble(is);

extrac.setId((int)log);
//商家名称
String businessName = cellStringUtil(row.getCell(1));
extrac.setBusinessName(businessName);
//提现金额
String money = cellStringUtil(row.getCell(2));
extrac.setExtrac_money(Double.parseDouble(money));
//提现时间
String date = cellStringUtil(row.getCell(3));
extrac.setExtrac_time(DateUtils.parseDate(date, "yyyy-MM-dd HH:mm:ss"));
//开户省份
String province = cellStringUtil(row.getCell(4));
extrac.setBankProvince(province);
//开户城市
String city = cellStringUtil(row.getCell(5));
extrac.setBankCity(city);
//开户支行
String bankChild = cellStringUtil(row.getCell(6));
extrac.setBankChildName(bankChild);
//开户人
String person = cellStringUtil(row.getCell(7));
extrac.setAccountUser(person);
//银行卡号
String account = cellStringUtil(row.getCell(8));
extrac.setBank_card_no(account);
//提现状态
int status = (int)Double.parseDouble(cellStringUtil(row.getCell(9)).trim());
//如果状态不为1 和 2,则报错
if(status != 1 && status != 2){
book.close();
return 10;
}
extrac.setExtrac_status(status);

list.add(extrac);
}

book.close();
new File(tempPath).delete();
System.out.println("excel上传成功!");
System.out.println(list);

//数据读取成功,所以需要把excel删除

//处理数据库中的提现成功,或者提现失败

for(BusinessExtrac xls : list){
//判断属于这条纪录的数据,在数据库中的状态,如果不是2,则返回错误
int status = extrac_Dao.getStatusById(xls.getId());
if(status!=2){
//上传过已经上传过的数据
return 11;
}else{
//需要更改数据库中的记录,把状态改为上传成功,或者上传失败
int tus = xls.getExtrac_status() == 1 ? 4 : 3;
if(xls.getExtrac_status() == 1){
//提现失败
//状态改为提现失败
extrac_Dao.setStatusById(xls.getId(),4);
}else if(xls.getExtrac_status() == 2){
//操作成功,把状态改为提现成功
extrac_Dao.setStatusById(xls.getId(),3);

Double extrac_money = extrac_Dao.getExtracMoneyById(xls.getId());
int businessId = extrac_Dao.getBusinessById(xls.getId());
extrac_Dao.updateBusinessExtrac(extrac_money,businessId);
}
}
}

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