今天需要完成282个指标,分析后发现好多都是可复用的字段和方法,生成的dao类也是很多重复的代码,所以写下了简单的自动化遍历excel的test方法, excel业务逻辑如下,用了

HSSFSheet

类来实现,并复习了一遍



public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileInputStream fStream = new FileInputStream("E:/开发文档/中台迁移表数据/新增指标.xls");//修改
HSSFWorkbook book = new HSSFWorkbook(fStream);

//获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....)
HSSFSheet sheet = book.getSheet("Sheet1");
StringBuilder sb = FuncUtils.getStringBuilder();
sb.setLength(0);
//遍历每一行内容
// 行数
sb.append("package org.gil.sydb.server.indicator.bond.zq.finanstatementnew.bank;").append("\r\n");
sb.append("\r\n");
sb.append("import com.google.common.collect.ImmutableList;").append("\r\n");
sb.append("import com.google.common.collect.ImmutableList;").append("\r\n");
sb.append("import org.gil.sydb.server.api.APIAnnotation.APIParam;").append("\r\n");
sb.append("import org.gil.sydb.server.api.APIAnnotation.ApiInfo;").append("\r\n");
sb.append("import org.gil.sydb.server.api.IAPI;").append("\r\n");
sb.append("import org.gil.sydb.server.cfidb.table.SecuMainAll;").append("\r\n");
sb.append("import org.gil.sydb.server.findb.table.FIN_OSDerivedIndex;").append("\r\n");
sb.append("import org.gil.sydb.server.findb.table.row.FIN_OSDerivedIndexRow;").append("\r\n");
sb.append("import org.gil.sydb.server.findb.table.FIN_OSDerivedTTMIndex;").append("\r\n");
sb.append("import org.gil.sydb.server.findb.table.row.FIN_OSDerivedTTMIndexRow;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.LC_QFinancialIndexNew;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.row.LC_QFinancialIndexNewRow;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.LC_BankLoan;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.row.LC_BankLoanRow;").append("\r\n");
sb.append("import org.gil.sydb.server.indicator.bond.zq.hsfinancanal.HSAnalysCommonsRows;").append("\r\n");
sb.append("import org.gil.sydb.server.indicator.util.Constant;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.Bond_Code;").append("\r\n");
sb.append("import org.gil.sydb.server.jydb.table.SecuMain;").append("\r\n");
sb.append("import org.gil.sydb.server.model.EFieldType;").append("\r\n");
sb.append("import org.gil.sydb.server.nfsdb.table.BaseCode;").append("\r\n");
sb.append("\r\n");
sb.append("import java.util.Arrays;").append("\r\n");
sb.append("import java.util.Date;").append("\r\n");
sb.append("import java.util.List;").append("\r\n");

sb.append("public class TestApi implements IAPI {").append("\r\n");

sb.append("\r\n");
sb.append(" @Override").append("\r\n");
sb.append(" public String getApiDescription() {").append("\r\n");
sb.append(" return \"债券数据浏览器->财务分析->新增指标\";").append("\r\n");
sb.append(" }").append("\r\n");
sb.append("\r\n");

sb.append(" @Override").append("\r\n");
sb.append(" public List<String> getDependTables() {").append("\r\n");
sb.append(" return ImmutableList.of(FIN_OSDerivedIndex.TABLENAME,FIN_OSDerivedTTMIndex.TABLENAME,LC_QFinancialIndexNew.TABLENAME,LC_BankLoan.TABLENAME).asList();").append("\r\n");
sb.append(" }").append("\r\n");
sb.append("\r\n");

int rowNumbers = sheet.getLastRowNum();
for (int t = 0; t < rowNumbers; t++) {
StringBuilder inputbuilder = new StringBuilder();
inputbuilder.setLength(0);
HSSFRow row = sheet.getRow(t);
sb.append(" @ApiInfo(Name=\"").append(row.getCell(1).toString()).append("\",Code={},ZhDescription=\"").append(row.getCell(0).toString()).append("\",ResultType=EFieldType.DOUBLEARRAY,ApiType=APIType.Bond)").append("\r\n");
if(row.getCell(4).toString().equals("InnerCode")) {
inputbuilder.append(",").append("int innerCode");
sb.append(" @APIParam(ZhName=\"内部编码\",EnName=\"InnerCode\",ParamType=EFieldType.INT,Required=true,Info=\"内部编码\")").append("\r\n");
}
if(row.getCell(7).toString().equals("ReportDate")) {
inputbuilder.append(",").append(" Date[] reportDate");
sb.append(" @APIParam(ZhName=\"报告期\",EnName=\"ReportDate\",ParamType=EFieldType.DATEARRAY,DefaultValue=Constant.RepDateDefValue,Info=\"报告期\")").append("\r\n");
}
if(row.getCell(7).toString().equals("TradingDate")) {
inputbuilder.append(",").append(" Date tradingDate");
sb.append(" @APIParam(ZhName=\"交易日期\",EnName=\"TradingDate\",ParamType=EFieldType.DATE,DefaultValue=Constant.TDateDefault,Info=\"交易日期\")").append("\r\n");
}
if(row.getCell(10).toString().equals("BaseDate")) {
inputbuilder.append(",").append(" int baseDate");
sb.append(" @APIParam(ZhName=\"TTM基准日\",EnName=\"BaseDate\",ParamType=EFieldType.INT,DefaultValue=\"0\",IsEnum=true,EnumValue=Constant.BaseDate)").append("\r\n");
}
if(row.getCell(10).toString().equals("Unit")) {
inputbuilder.append(",").append(" int unit");
sb.append(" @APIParam(ZhName=\"单位\",EnName=\"Unit\",ParamType=EFieldType.INT,DefaultValue=\"0\",IsEnum=true,EnumValue=Constant.Unit)").append("\r\n");
}
if(row.getCell(13).toString().equals("Unit")) {
inputbuilder.append(",").append(" int unit");
sb.append(" @APIParam(ZhName=\"单位\",EnName=\"Unit\",ParamType=EFieldType.INT,DefaultValue=\"0\",IsEnum=true,EnumValue=Constant.Unit)").append("\r\n");
}
System.out.println(inputbuilder);
System.out.println(row.getCell(1).toString());
sb.append(" public double[] get").append(row.getCell(1).toString()).append("(").append(inputbuilder.substring(1)).append(") {").append("\r\n");
String input = row.getCell(3).toString();
sb.append(" ").append(methodMap.get(String.valueOf(row.getCell(2).toString())));
if (String.valueOf(row.getCell(2).toString()).equals("FIN_OSDerivedIndex")||String.valueOf(row.getCell(2).toString()).equals("FIN_OSDerivedTTMIndex")) {//包含英文字符
sb.append(input).append("\"");
}else if (String.valueOf(row.getCell(2).toString()).equals("LC_QFinancialIndexNew")) {
sb.append(input);
} else{
BigDecimal bd = new BigDecimal(input);
String checkValue = bd.toPlainString();
sb.append(checkValue);
}
sb.append(");").append("\r\n");
sb.append(" }").append("\r\n");
sb.append("\r\n");
}

sb.append("}").append("\r\n\r\n");

// System.out.println(sb.toString());
FileWriter fwriter = null;
try {
// true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好
fwriter = new FileWriter("E:/开发文档/TestApi.java", true);//修改
fwriter.write(sb.toString());
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
fwriter.flush();
fwriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

}


static Map<String, String> methodMap = new HashMap<>();
static {
methodMap.put("FIN_OSDerivedIndex", "return HSAnalysCommonsRows.getBasicEpsWithDeductionWithoutSharesValue(innerCode, reportDate, \"");
methodMap.put("FIN_OSDerivedTTMIndex", "return HSAnalysCommonsRows.getBasicEpsWithDeductionValueWithUnitTTM(innerCode, reportDate, unit, \"");
methodMap.put("LC_QFinancialIndexNew", "return HSAnalysCommonsRows.getSingleQuarter(innerCode, reportDate, LC_QFinancialIndexNewRow::get");
methodMap.put("LC_BankLoan", "return HSAnalysCommonsRows.getBankLoansWithUnit(innerCode, reportDate, unit, ");
}
}

用java代码遍历excel文件并回显的更多相关文章

  1. java代码将excel文件中的内容列表转换成JS文件输出

    思路分析 我们想要把excel文件中的内容转为其他形式的文件输出,肯定需要分两步走: 1.把excel文件中的内容读出来: 2.将内容写到新的文件中. 举例 一张excel表中有一个表格: 我们需要将 ...

  2. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  3. List<Map<String,Object>>使用Java代码遍历

    List<Map<String,Object>>的结果集怎么使用Java代码遍历以获取String,Object的值: package excel; import java.u ...

  4. Java解析导入Excel文件后台代码实现

    使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...

  5. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

  6. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  7. java批量生成excel文件

    1.导入用于操作excel的jar,地址:https://pan.baidu.com/s/1qXADRlU 2.生成excel使用的模版文件,地址:https://pan.baidu.com/s/1c ...

  8. Java——poi读取Excel文件

    1.创建文件流,打开EXCEL文件 FileInputStream excelFile = new FileInputStream(excelPath); XSSFWorkbook workbook ...

  9. Android中用Java代码实现zip文件解压缩

    如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...

随机推荐

  1. Nmap 常用命令及抓包分析

    1.主机发现:主机发现也称为ping扫描,但是Nmap中主机发现的技术已经不是简单的采用ping工具发送简单的ICMP回声请求报文.用户完全可以通过使用列表扫描(-sL)或者通过关闭ping(-P0) ...

  2. NOIP 模拟 9 考试总结

    T1 一道推规律的题,没想出来,暴力打得常数还太大了,挂了不少 题解 T2 这是一道二分题,很巧妙,但是对于想我一样懒得人,那个数据结构就水过去了 (裸的分块加强大的卡长和合适的块的大小可以卡过去) ...

  3. 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)

    链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...

  4. Mysql 之 IFNULL(expr1,expr2) 对空不可判

    目标 当传入参数 @OrderId为空时 不做过滤 sql语句如下 SELECT o.* FROM `order` AS o LEFT JOIN receivemoneyconfirm AS re O ...

  5. C# 排序列表(SortedList)

    SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问. 排序列表是数组和哈希表的组合.它包含一个可使用键或索引访问各项的列表.如果您使用索引访问各项,则它是一个 ...

  6. Sparksql 日期加减函数

    1.日期加减spark sql 日期加减,date_sub,date_addval dateDF=spark.range(10) .withColumn("today",curre ...

  7. Android开发,缺少权限导致无法修改原文件,获取所有文件访问权限的方法

    在Android 11开发中,app会遇到使用绝对路径无法打开某文件的情况(文件存在根目录下,获取到的路径为:/storage/emulated/0/XXX.txt),而使用相对路径打开文件后(获取到 ...

  8. linux高级监控atop的使用

    一.centos安装 sudo yum -y install epel-release.noarch sudo yum -y install atop sudo systemctl enable at ...

  9. python3使用pycuda执行简单GPU计算任务

    技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...

  10. sychronized

    说一下 synchronized 底层实现原理? synchronized可以保证方法或者代码块在运行时, 同一时刻只有一个方法可以进入到临界区, 同时它还可以保证共享变量的内存可见性. Java中每 ...