zoukankan      html  css  js  c++  java
  • 【11-29】excel reader

    package com.ka.common;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.bucketing.common.business.entity.curve.IRCurveValue;
    import com.ka.common.pricingutils.CurveFactory;
    
    public abstract class DiscountCurveExcelReader {
    
        public static IRCurveValue readIRCurveValueFromExcel(String path) {
            InputStream is = DiscountCurveExcelReader.class.getClassLoader().getResourceAsStream(path);
            ArrayList<ArrayList<Object>> excelContent = readExcel2007(is);
            excelContent.remove(0);
            int[] terms = new int[excelContent.size()];
            double[] rates = new double[excelContent.size()];
            for (int i = 0; i < excelContent.size(); ++i) {
                ArrayList<Object> innerList = excelContent.get(i);
                terms[i] = Double.valueOf((Double.valueOf((String) innerList.get(1)) * 365)).intValue();
                double temp = Math.log(1 + 0.01 * (Double.valueOf((String) innerList.get(2)))) / Math.log(Math.E);
                rates[i] = temp;
            }
            IRCurveValue discountCurveValue = CurveFactory.getInstance().createIRCurveValue(terms, rates);
            return discountCurveValue;
        }
    
        public static ArrayList<ArrayList<Object>> readExcel2007(InputStream is) {
            ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
            ArrayList<Object> colList;
            try (XSSFWorkbook wb = new XSSFWorkbook(is)) {
                XSSFSheet sheet = wb.getSheetAt(0);
                XSSFRow row;
                XSSFCell cell;
                Object value;
                for (int i = sheet.getFirstRowNum(), rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) {
                    row = sheet.getRow(i);
                    colList = new ArrayList<Object>();
                    if (row == null) {
                        if (i != sheet.getPhysicalNumberOfRows()) {
                            rowList.add(colList);
                        }
                        continue;
                    } else {
                        rowCount++;
                    }
                    for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
                        cell = row.getCell(j);
                        if (cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
                            if (j != row.getLastCellNum()) {
                                colList.add("");
                            }
                            continue;
                        }
                        switch (cell.getCellType()) {
                        case XSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            break;
                        case XSSFCell.CELL_TYPE_NUMERIC:
                            value = String.valueOf(cell.getNumericCellValue());
                            break;
                        case XSSFCell.CELL_TYPE_BOOLEAN:
                            value = Boolean.valueOf(cell.getBooleanCellValue());
                            break;
                        case XSSFCell.CELL_TYPE_BLANK:
                            value = "";
                            break;
                        default:
                            value = cell.toString();
                        }
                        colList.add(value);
                    }
                    rowList.add(colList);
                }
                return rowList;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    
    
    
  • 相关阅读:
    vue 中 vue-router、transition、keep-alive 怎么结合使用?
    vue 对列表数组删除和增加
    eclipse如何快速查找某个类
    在 eclipse 中设置每行的字数
    如何查看某个端口被谁占用
    sql只修改第一二行数据
    android真机自动化测试
    appium自动化测试中获取toast消息的解决方法【转】
    eclipse下python的selenium自动化环境的搭建
    Xpath用法官方手册
  • 原文地址:https://www.cnblogs.com/achievec/p/7922018.html
Copyright © 2011-2022 走看看