今天需要完成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. Linux下MySQL多实例部署记录

    什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端 ...

  2. TextLineCodecFactory笔记

    Mina的TextLineCodecFactory将字符串编码为字节流,将字节流解码为字符串,下面是使用中遇到的两个问题. TextLineCodecFactory改变了message的类型 acce ...

  3. Mina的JMX支持

    以下是一个增加了JMX支持的Mina Echo Server. package org.apache.mina.echoServer; import java.lang.management.Mana ...

  4. 3、二进制安装K8s之部署kube-apiserver

    二进制安装K8s之部署kube-apiserver 一.生成 kube-apiserver 证书 1.自签证书颁发机构(CA) cat > ca-config.json <<EOF ...

  5. C# 异步锁

    参考网址: https://www.cnblogs.com/Alicia-meng/p/13330640.html 使用SemaphoreSlim 实现 当多个任务或线程并行运行时,难以避免的对某些有 ...

  6. 【spring 注解驱动开发】扩展原理

    尚学堂spring 注解驱动开发学习笔记之 - 扩展原理 扩展原理 1.扩展原理-BeanFactoryPostProcessor BeanFactoryPostProcessor * 扩展原理: * ...

  7. WPF : ControlTemplate和DataTemplate的区别

    ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}DataTemplate用于描述 ...

  8. MVVMLight学习笔记(四)---RelayCommand初探

    一.概述 在MVVM Light框架中,主要通过命令绑定来进行事件的处理. WPF中,命令是通过实现 ICommand 接口创建的. ICommand 公开了两个方法(Execute 及 CanExe ...

  9. 03.SpringMVC之器

    整体结构介绍 在Servlet的继承结构中一共有5个类,GenericServlet和HttpServlet在java中剩下的三个类HttpServletBean.FrameworkServlet和D ...

  10. input text 只能输入数字 js 正则表达式

    $("#txt1").keyup(function () { $(this).val($(this).val().replace(/[^0-9.]/g, '')); }).bind ...