用java代码遍历excel文件并回显
今天需要完成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文件并回显的更多相关文章
- java代码将excel文件中的内容列表转换成JS文件输出
思路分析 我们想要把excel文件中的内容转为其他形式的文件输出,肯定需要分两步走: 1.把excel文件中的内容读出来: 2.将内容写到新的文件中. 举例 一张excel表中有一个表格: 我们需要将 ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
- List<Map<String,Object>>使用Java代码遍历
List<Map<String,Object>>的结果集怎么使用Java代码遍历以获取String,Object的值: package excel; import java.u ...
- Java解析导入Excel文件后台代码实现
使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
- java POI导出Excel文件数据库的数据
在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...
- java批量生成excel文件
1.导入用于操作excel的jar,地址:https://pan.baidu.com/s/1qXADRlU 2.生成excel使用的模版文件,地址:https://pan.baidu.com/s/1c ...
- Java——poi读取Excel文件
1.创建文件流,打开EXCEL文件 FileInputStream excelFile = new FileInputStream(excelPath); XSSFWorkbook workbook ...
- Android中用Java代码实现zip文件解压缩
如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...
随机推荐
- 解析java源文件
尝试从java源文件中解析出类.方法.属性等信息,但下面的代码没有完全实现. Sub parseJava() Dim package_name as String 'read a file Docum ...
- 机器学习:单元线性回归(python简单实现)
文章简介 使用python简单实现机器学习中单元线性回归算法. 算法目的 该算法核心目的是为了求出假设函数h中多个theta的值,使得代入数据集合中的每个x,求得的h(x)与每个数据集合中的y的差值的 ...
- MySQL索引篇之索引存储模型
本文重点介绍下索引的存储模型 二分查找 给定一个1~100的自然数,给你5次机会,你能猜中这个数字吗? 你会从多少开始猜? 为什么一定是50呢?这个就是二分查找的一种思想,也叫折半查找,每 ...
- Python 应用爬虫下载QQ音乐
Python应用爬虫下载QQ音乐 目录: 1.简介怎样实现下载QQ音乐的过程: 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首 ...
- Shellshock 破壳漏洞 Writeup
破壳漏洞 CVE编号:CVE-2014-6271 题目URL:http://www.whalwl.site:8029/ 提示:flag在服务器根目录 ShellShock (CVE-2014-6271 ...
- 攻防世界PWN简单题 level0
攻防世界PWN简单题 level0 开始考验栈溢出的相关知识了 Checksec 一下文件 看看都开了什么保护 和 是多少位的程序 发现是64位的程序, 扔进IDA64.IDA YYDS.. 进入主函 ...
- .NET Core:在ASP.NET Core WebApi中使用Cookie
一.Cookie的作用 Cookie通常用来存储有关用户信息的一条数据,可以用来标识登录用户,Cookie存储在客户端的浏览器上.在大多数浏览器中,每个Cookie都存储为一个小文件.Cookie表示 ...
- 1.3RDD的设计与运行原理
此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/ 提供一种通用的数据抽象 RDD典型的执行过程如下: RDD读入外部数据源(或者内存中的集合 ...
- 区间k大数训练
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...
- CentOS7部署SSH服务
1 ssh服务部署 输入命令 yum list | grep ssh 查看可安装的软件包,选择openssh-service.x86_64 输入下面命令进行安装openssh服务 yum instal ...