POI读取Excel数据的一个demo
2018-02-09 10:13
375 查看
//总行数 private int totalRows = 0; //总条数 private int totalCells = 0; //错误信息接收器 private String errorMsg; //构造方法 public ReceiveMailNew2018_5(){} //获取总行数 public int getTotalRows() { return totalRows;} //获取总列数 public int getTotalCells() { return totalCells;} //获取错误信息 public String getErrorInfo() { return errorMsg; } List<BankBill> bbList = new ArrayList<BankBill>(); public void analysizeBankExcel(String path,InputStream ism) throws IOException{ Workbook wb = null; if(isExcel2003(path)){ wb = new HSSFWorkbook(ism); } else{//当excel是2007时 wb = new XSSFWorkbook(ism); } ism.close(); //得到第一个shell Sheet sheet=wb.getSheetAt(0); //得到Excel的行数 this.totalRows=sheet.getPhysicalNumberOfRows(); //得到Excel的列数(前提是有行数) if(totalRows>=1 && sheet.getRow(0) != null){ this.totalCells=sheet.getRow(2).getPhysicalNumberOfCells(); } System.out.println(totalCells); Cell cell = null; // cell.setCellType(Cell.CELL_TYPE_STRING); // String value = sheet.getRow(1).getCell(1).getStringCellValue(); // sheet.addMergedRegion(new CellRangeAddress( int startRow,int endRow, int startCol, int endCol));// 设置单元格合并 //获取表中合并单元格的数据 /* int sheetMergeCount = sheet.getNumMergedRegions(); System.out.println(sheetMergeCount); for(int i = 0 ; i < sheetMergeCount ; i++){ CellRangeAddress ca = sheet.getMergedRegion(i); int firstColumn = ca.getFirstColumn(); int lastColumn = ca.getLastColumn(); int firstRow = ca.getFirstRow(); int lastRow = ca.getLastRow(); System.out.println(firstColumn+","+lastColumn+","+firstRow+","+lastRow); Row fRow = sheet.getRow(firstRow); Cell fCell = fRow.getCell(firstColumn); System.out.println(getCellValue(fCell));*/ // return getCellValue(fCell) ; // if(row >= firstRow && row <= lastRow){ // // if(column >= firstColumn && column <= lastColumn){ // Row fRow = sheet.getRow(firstRow); // Cell fCell = fRow.getCell(firstColumn); // return getCellValue(fCell) ; // } // } // } //获取循环节点的数据 //循环Excel行数,从第3行开始 BankBill bankBill =null; DecimalFormat df = new DecimalFormat("######0.00"); String money = null; int rowNum = 0; int add = 0; int NoneAdd = 0; String clearDateStr = null; //清算时间 List<String> lsStrs = new ArrayList<String>(); for(int r=4;r<totalRows-2;r++){ rowNum++; Row row = sheet.getRow(r); if (row == null) continue; bankBill = new BankBill(); try { // bankBill.setMerchantNo("XXXXX50450494"); bankBill.setMerchant("XXXXX集团股份有限公司"); bankBill.setReceiveOrgan("银联商务XXX公司"); // //1清算日期 cell = row.getCell(0); bankBill.setClearDate(getCellValue(cell)); clearDateStr = getCellValue(cell); // System.out.print(getCellValue(cell)+","); //2生成日期 /*cell = row.getCell(1); System.out.print(excelDate(cell)+",");*/ // System.out.print(generateDate()+","); bankBill.setGenerateDate(generateDate()); //3交易日期时间 cell = row.getCell(2); // System.out.print(excelTime(cell)+","); bankBill.setTranDateTime(excelTime(cell)); /*SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); Date d = dateFormat.parse(excelTime(cell)); System.err.println(d.toString());*/ //4终端号 cell = row.getCell(3); bankBill.setTerminalNo(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //5交易金额 cell = row.getCell(4); bankBill.setTranAmount(Double.parseDouble(getCellValue(cell))); // System.out.print(getCellValue(cell)+","); //6清算金额 cell = row.getCell(5); bankBill.setClearAmount(Double.parseDouble(getCellValue(cell))); // System.out.print(getCellValue(cell)+","); //7手续费 cell = row.getCell(6); bankBill.setFee(Double.parseDouble(getCellValue(cell))); // System.out.print(getCellValue(cell)+","); //8流水号(跟踪号) cell = row.getCell(7); bankBill.setSerialNo(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //9交易类型 cell = row.getCell(8); bankBill.setTradeType(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //10参考号 cell = row.getCell(9); bankBill.setRefNo(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //11卡号 cell = row.getCell(10); bankBill.setCardNo(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //12卡类型 cell = row.getCell(11); bankBill.setCardType(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //13发卡行 cell = row.getCell(12); bankBill.setCardBank(getCellValue(cell)); // System.out.print(getCellValue(cell)+","); //14流水序号 String terminalNo = bankBill.getTerminalNo(); // if ("01096488".equals(terminalNo) || "01096478".equals(terminalNo) || "01096477".equals(terminalNo)) { if ("CS000001".equals(terminalNo)) { add++; lsStrs.add(clearDateStr); bbList.add(bankBill); //System.out.println(":::"+bankBill); }else { NoneAdd++; //System.err.println(":::"+bankBill); } } catch (Exception e) { e.printStackTrace(); } } // System.out.println("add:::"+add); // System.out.println("NoneAdd:::"+NoneAdd); // System.out.println("rowNum:"+rowNum); List<String> lsNos = new ArrayList<String>(); lsNos = getLsNos(lsStrs); if (bbList.size()!= 0 && lsNos.size()!=0 && lsNos.size() == bbList.size()) { for (int i = 0; i < lsNos.size(); i++) { bbList.get(i).setLsNo(lsNos.get(i)); //System.err.println("bankBill:::"+bbList.get(i).toString()); } //System.out.println(); } else { String flag = lsNos.size() == bbList.size()?"true":"false"; System.out.println("lsNos.size() == bbList.size() : "+flag); } }
public List<String> getLsNos(List<String> lsStrs) {/**
int num = 0;
String lsNo = null;
List<String> lsNos = new ArrayList<String>();
if (lsStrs.size()>=1) {
//将一次上传的lsNo号码定义的结束掉以end为准
lsNo = lsStrs.get(0)+"000"+"END";
lsNos.add(lsNo);
/*
*其他的循环给定lsNo号码
*/
for (int i = 1; i < lsStrs.size(); i++) {
num++;
if (lsStrs.get(i).equals(lsStrs.get(i-1))){
lsNo = lsStrs.get(i)+"00000"+num;
lsNos.add(lsNo);
} else {
num = 1;
lsNo = lsStrs.get(i)+"00000"+1;
lsNos.add(lsNo);
}
}
}
String subStr = lsNos.get(0).substring(0,8);
int subNum = 0;
for (int i = 0; i < lsNos.size(); i++) {
if (subStr.equals(lsNos.get(i).substring(0, 8))) {
subNum++;
lsNos.set(i, lsStrs.get(i)+"00000"+subNum);
}
}
return lsNos;
};
public static void main(String[] args){
ReceiveMailNew2018_5 rm = new ReceiveMailNew2018_5();
InputStream ism;
String path=null;
try {
String newPath = "E:\\2018workFolderShun\\pos\\pos18";
ism = new FileInputStream(new File(newPath+"\\2017.10商户清算明细20180117101401test.xls"));
path =newPath+"\\2017.10商户清算明细20180117101401test.xls";
rm.analysizeBankExcel(path,ism);
rm.analysizeWZExcel(path,ism);
rm.conn();
// rm.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
* @author SHUN
* 生成系统日期,并将其格式化返回字符串
* @return
*/
public String generateDate(){
String guarantee_date = null;
Date generateDate = new Date();
DateFormat formater = new SimpleDateFormat("yyyyMMdd");
guarantee_date = formater.format(generateDate);
return guarantee_date;
}
/**
* @author SHUN
* @param cell import org.apache.poi.ss.usermodel.Cell;
* 关于如何将Excel表格中的时间字符串的数字格式 转换成 格式化的时间字符串
* @return
*/
public String excelTime(Cell cell){
String guarantee_time = null;
if(DateUtil.isCellDateFormatted(cell)){
//用于转化为日期格式
Date d = cell.getDateCellValue();
// System.err.println(d.toString());
// DateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateFormat formater = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
guarantee_time = formater.format(d);
}
return guarantee_time;
}
//@描述:是否是2003的excel,返回true是2003 public static boolean isExcel2003(String filePath) { return filePath.matches("^.+\\.(?i)(xls)$"); } //@描述:是否是2007的excel,返回true是2007 public static boolean isExcel2007(String filePath) { return filePath.matches("^.+\\.(?i)(xlsx)$"); }
/** * 获取单元格的值 * @param cell * @return */ public String getCellValue(Cell cell){ if(cell == null) return ""; if(cell.getCellType() == Cell.CELL_TYPE_STRING){ return cell.getStringCellValue(); }else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){ return String.valueOf(cell.getBooleanCellValue()); }else if(cell.getCellType() == Cell.CELL_TYPE_FORMULA){ return cell.getCellFormula() ; }else if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){ return String.valueOf(cell.getNumericCellValue()); } return ""; }
/** * 将带空格的字符串拆分成字符串数组 * * @author bushy * @createDate 2013-3-25 * @param strBlank * @return */ private String[] splitBlank2Array(String strBlank) { if (StringUtils.isNotBlank(strBlank)) { return strBlank.split("\\s{1,}"); } return null; }
建议所用jar包
Excel 表格数据实例
相关文章推荐
- Java POI读取/导出Excel数据
- java poi读取excel日期格式数据
- java的poi技术读取Excel数据到MySQL
- poi读取数据写入excel
- 利用poi数据导出到excel demo
- POI对Excel操作——java读取Excel数据
- 用POI读取具有任意合并单元的excel数据
- POI 读取excel模版并填写数据
- poi生成excel,在生成下拉框的时候,数据比较大,报错,有没有有解决方案的,求发一个,谢谢.下面有具体内容
- Java+Poi 读取Excel做数据导入时获取cell值的方法
- 【JAVA】poi操作,excel读取数据。
- Apache POI -- 读取Excel文件数据导入到数据库
- poi读取excel兼容(2003、2007)各种数据类型
- poi读取excel数据一直报错Cannot get a STRING value from a NUMERIC cell
- 使用POI 读取Excel文件数据
- POI3.10读取xlsx,并解析日期类型数据 Demo
- java中使用POI导入excel数据的过程中,遇到读取以科学计数法显示的数据
- JavaPoi技术二-------导出数据到Excel以及从excel中读取数据
- java的poi技术读取Excel数据到MySQL
- 用Java POI操作Excel,读取数据导入DB2数据库