首页 > Web开发 > 详细

ApachePoiUtils

时间:2020-11-05 08:53:35      阅读:35      评论:0      收藏:0      [点我收藏+]

 

生成Excel报表

package top.zzzwww.utils;
?
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
?
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
?
public class ApachePoiUtil2 {
   public static void main(String[] args) throws Exception {
       OutputStream os = new FileOutputStream("F:\\test.xls");
       Workbook wb = new HSSFWorkbook();
       ApachePoiUtil2 test = new ApachePoiUtil2();
       test.createFile(os, wb);
  }
?
   private void createFile(OutputStream os,Workbook wb) throws IOException{
       int i = 0;
       int j = 0;
       double
       = 0.00;
       double ref_amt = 0.00;
       String[] refundLogs = new String[2];
       String str1 = "20110812|34234234242432|345.00|323   .00";
       String str2 = "20110504|45656464535345|231.34|231.34";
       refundLogs[0] = str1;
       refundLogs[1] = str2;
       // 创建工作表指定工作表名称
       Sheet sheet = wb.createSheet("T建行退款文件");
       // 创建行,0表示第一行
       Row row = sheet.createRow(0);
       for(i=1;i<=3;i++){
           sheet.createRow(i);
      }
?
       for(i=0;i<4;i++)
           row.createCell(i);
?
       // 合并单元格
       sheet.addMergedRegion(new CellRangeAddress(0, 3, 0, 3));
       //CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
       //参数:起始行号,终止行号, 起始列号,终止列号
       // 设置字体
       Font font = wb.createFont();
       // 设置字体名称
       font.setFontName("黑体");
       font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
?
       CellStyle cs1 = wb.createCellStyle();
       cs1.setAlignment(CellStyle.ALIGN_CENTER);
       cs1.setDataFormat(wb.createDataFormat().getFormat("yyyyMMdd"));
       cs1.setFont(font);
?
       CellStyle cs2 = wb.createCellStyle();
       cs2.setAlignment(CellStyle.ALIGN_CENTER);
       cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
       cs2.setFont(font);
?
       CellStyle cs3 = wb.createCellStyle();
       cs3.setAlignment(CellStyle.ALIGN_CENTER);
       cs3.setFont(font);
?
       row = sheet.getRow(0);
       Cell cell = row.getCell(0);
       cell.setCellType(HSSFCell.CELL_TYPE_STRING);
       cell.setCellValue("建行运行中心:\n\t"+"现有"+refundLogs.length+"表退款交易,请配合汇付天下公司进行审核");
?
       sheet.createRow(4);
       row = sheet.createRow(5);
?
       cell = row.createCell(0);
       cell.setCellType(HSSFCell.CELL_TYPE_STRING);
       cell.setCellValue("商户编号:");
       cell = row.createCell(1);
       cell.setCellType(HSSFCell.CELL_TYPE_STRING);
       cell.setCellValue("45433242");
?
       row = sheet.createRow(6);
       cell = row.createCell(0);
       cell.setCellType(HSSFCell.CELL_TYPE_STRING);
       cell.setCellValue("交易明细:");
?
       row = sheet.createRow(7);
       row.createCell(0).setCellValue("退款日期");
       row.createCell(1).setCellValue("消费卡号");
       row.createCell(2).setCellValue("消费金额");
       row.createCell(3).setCellValue("退款金额");
       for(i=0;i<4;i++)
           row.getCell(i).setCellStyle(cs3);
?
?
       for(i=8;i<=7+refundLogs.length;i++)
      {
           sheet.createRow(i);
           for(j=0;j<4;j++)
               sheet.getRow(i).createCell(j);
      }
       for(i=0;i<refundLogs.length;i++){
           row = sheet.getRow(8+i);
           String[] refundLog = refundLogs[i].split("\\|");
           cell = row.getCell(0);
           cell.setCellStyle(cs1);
           cell.setCellValue(refundLog[0]);
?
           cell = row.getCell(1);
           cell.setCellType(HSSFCell.CELL_TYPE_STRING);
           cell.setCellStyle(cs3);
           cell.setCellValue(refundLog[1]);
?
           cell = row.getCell(2);
           cell.setCellStyle(cs2);
           cell.setCellValue(refundLog[2]);
           trans_amt += Double.parseDouble(refundLog[2]);
?
           cell = row.getCell(3);
           cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
           cell.setCellStyle(cs2);
           cell.setCellValue(refundLog[3]);
           ref_amt += Double.parseDouble(refundLog[3]);
      }
?
       row = sheet.createRow(9+i);
       for(i=0;i<4;i++)
           row.createCell(i);
       row.getCell(0).setCellValue("总计:");
       row.getCell(2).setCellValue(trans_amt);
       row.getCell(3).setCellValue(ref_amt);
?
       sheet.autoSizeColumn(0);
       sheet.autoSizeColumn(1);
       sheet.autoSizeColumn(2);
       sheet.autoSizeColumn(3);
?
       wb.write(os);
  }
?
}
?

 

 

 

解析excel数据

`package com.zzzwww.utils;
?
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
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.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
?
public class POIUtils {
   private final static String xls = "xls";
   private final static String xlsx = "xlsx";
   private final static String DATE_FORMAT = "yyyy/MM/dd";
   /**
    * 读入excel文件,解析后返回
    * @param file
    * @throws IOException
    */
   public static List<String[]> readExcel(MultipartFile file) throws IOException {
       //检查文件
       checkFile(file);
       //获得Workbook工作薄对象
       Workbook workbook = getWorkBook(file);
       //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
       List<String[]> list = new ArrayList<String[]>();
       if(workbook != null){
           for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
               //获得当前sheet工作表
               Sheet sheet = workbook.getSheetAt(sheetNum);
               if(sheet == null){
                   continue;
              }
               //获得当前sheet的开始行
               int firstRowNum  = sheet.getFirstRowNum();
               //获得当前sheet的结束行
               int lastRowNum = sheet.getLastRowNum();
               //循环除了第一行的所有行
               for(int rowNum = firstRowNum+1;rowNum <= lastRowNum;rowNum++){
                   //获得当前行
                   Row row = sheet.getRow(rowNum);
                   if(row == null){
                       continue;
                  }
                   //获得当前行的开始列
                   int firstCellNum = row.getFirstCellNum();
                   //获得当前行的列数
                   int lastCellNum = row.getPhysicalNumberOfCells();
                   String[] cells = new String[row.getPhysicalNumberOfCells()];
                   //循环当前行
                   for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
                       Cell cell = row.getCell(cellNum);
                       cells[cellNum] = getCellValue(cell);
                  }
                   list.add(cells);
              }
          }
           workbook.close();
      }
       return list;
  }
?
   //校验文件是否合法
   public static void checkFile(MultipartFile file) throws IOException{
       //判断文件是否存在
       if(null == file){
           throw new FileNotFoundException("文件不存在!");
      }
       //获得文件名
       String fileName = file.getOriginalFilename();
       //判断文件是否是excel文件
       if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){
           throw new IOException(fileName + "不是excel文件");
      }
  }
   public static Workbook getWorkBook(MultipartFile file) {
       //获得文件名
       String fileName = file.getOriginalFilename();
       //创建Workbook工作薄对象,表示整个excel
       Workbook workbook = null;
       try {
           //获取excel文件的io流
           InputStream is = file.getInputStream();
           //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
           if(fileName.endsWith(xls)){
               //2003
               workbook = new HSSFWorkbook(is);
          }else if(fileName.endsWith(xlsx)){
               //2007
               workbook = new XSSFWorkbook(is);
          }
      } catch (IOException e) {
           e.printStackTrace();
      }
       return workbook;
  }
   public static String getCellValue(Cell cell){
       String cellValue = "";
       if(cell == null){
           return cellValue;
      }
       //如果当前单元格内容为日期类型,需要特殊处理
       String dataFormatString = cell.getCellStyle().getDataFormatString();
       if(dataFormatString.equals("m/d/yy")){
           cellValue = new SimpleDateFormat(DATE_FORMAT).format(cell.getDateCellValue());
           return cellValue;
      }
       //把数字当成String来读,避免出现1读成1.0的情况
       if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
           cell.setCellType(Cell.CELL_TYPE_STRING);
      }
       //判断数据的类型
       switch (cell.getCellType()){
           case Cell.CELL_TYPE_NUMERIC: //数字
               cellValue = String.valueOf(cell.getNumericCellValue());
               break;
           case Cell.CELL_TYPE_STRING: //字符串
               cellValue = String.valueOf(cell.getStringCellValue());
               break;
           case Cell.CELL_TYPE_BOOLEAN: //Boolean
               cellValue = String.valueOf(cell.getBooleanCellValue());
               break;
           case Cell.CELL_TYPE_FORMULA: //公式
               cellValue = String.valueOf(cell.getCellFormula());
               break;
           case Cell.CELL_TYPE_BLANK: //空值
               cellValue = "";
               break;
           case Cell.CELL_TYPE_ERROR: //故障
               cellValue = "非法字符";
               break;
           default:
               cellValue = "未知类型";
               break;
      }
       return cellValue;
  }
}
?

 

ApachePoiUtils

原文:https://www.cnblogs.com/w574w/p/13929716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!