解析Excel注释,填充并生成报表的一个例子

本文介绍了一种从Excel批注中解析数据并生成对应SQL查询语句的方法。通过定义特定的数据结构和使用Java编程语言,实现了针对不同对象类型的查询构造。此方法适用于电力行业数据处理场景。

数据库设计:

Table 信息表字段:

SYS_TABLE_NO<o:p></o:p>

SYS_TABLE_NAME<o:p></o:p>

SYS_TABLE_CHS_NAME<o:p></o:p>

SYS_APP_ID<o:p></o:p>

SYS_TABLE_IF_BASE_TABLE

<o:p> </o:p>

列信息表字段

SYS_COLUMN_ID<o:p></o:p>

SYS_APP_ID<o:p></o:p>

SYS_OBJECT_ID<o:p></o:p>

SYS_TABLE_NO<o:p></o:p>

SYS_COLUMN_NO<o:p></o:p>

SYS_COLUMN_NAME<o:p></o:p>

SYS_COLUMN_CHS_NAME<o:p></o:p>

SYS_COLUMN_TYPE<o:p></o:p>

SYS_COLUMN_LENGTH<o:p></o:p>

SYS_COLUMN_ISNULLABLE<o:p></o:p>

SYS_COLUMN_AUTOVAL<o:p></o:p>

SYS_STORAGE_TYPE

<o:p> </o:p>

Excel批注信息:

(1403182083,32,1,4,0,1,0,0,0,1,30,2,0)<o:p></o:p>

XXXXX_XXX_XXXXXXX<o:p></o:p>

类型:XXX<o:p></o:p>

时间:001:30

<o:p> </o:p>

解析Excel批注信息,生成对应的Sql语句。                                                    

SqlParse.java

import java.util.Calendar;<o:p></o:p>

<o:p> </o:p>

import org.eimhe.bean.SysColumnInfo;<o:p></o:p>

import org.eimhe.bean.SysTableInfo;<o:p></o:p>

import org.eimhe.dao.SysColumnInfoDao;<o:p></o:p>

import org.eimhe.dao.SysTableInfoDao;<o:p></o:p>

class ReceiveData{<o:p></o:p>

       long columnId;              //列号<o:p></o:p>

       long recordKey1;    //电厂号或区域号<o:p></o:p>

       long recordKey2;    //机组号<o:p></o:p>

       int timeType;          //timetype<o:p></o:p>

       int dataValue;          //0采样值<o:p></o:p>

       int typeValue;         //数据类型<o:p></o:p>

       int yearValue;<o:p></o:p>

       int monthValue;<o:p></o:p>

       int DayValue;<o:p></o:p>

       int hourValue;<o:p></o:p>

       int minuteValue;<o:p></o:p>

       int formulaValue;<o:p></o:p>

<o:p> </o:p>

}<o:p></o:p>

public class SqlParser {<o:p></o:p>

       private String sqlColname="";<o:p></o:p>

       private long sqlTableNo=<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="0" negative="False" numbertype="1" unitname="l" w:st="on">0l</st1:chmetcnv>;<o:p></o:p>

       private String sqlTableName="";<o:p></o:p>

       private int objectType=0;<o:p></o:p>

       private String year="",month="",day="";<o:p></o:p>

       private static int  periodId=0;<o:p></o:p>

       private static String[] x;<o:p></o:p>

       private static StringBuffer result;<o:p></o:p>

       int i,j;<o:p></o:p>

       private static SysColumnInfo sysColumnInfo=new SysColumnInfo();//系统列信息<o:p></o:p>

       private static SysTableInfo sysTableInfo=new SysTableInfo();//系统表信息<o:p></o:p>

       private static SysColumnInfoDao sysColumnInfoDao=new SysColumnInfoDao();<o:p></o:p>

       private static SysTableInfoDao sysTableInfoDao=new SysTableInfoDao();<o:p></o:p>

       private static ReceiveData rd;<o:p></o:p>

       public static String sqlParser2(String comment,Calendar cal){<o:p></o:p>

//            x[0]-----列号<o:p></o:p>

//            x[1]-----电厂号或区域号<o:p></o:p>

//            x[3]-----机组号<o:p></o:p>

//            x[4]-----timetype<o:p></o:p>

//            x[5]-----0采样值<o:p></o:p>

//            x[6]-----数据类型<o:p></o:p>

//            x[7]-----<o:p></o:p>

//            x[8]-----<o:p></o:p>

//            x[9]-----<o:p></o:p>

//            x[10]-----<o:p></o:p>

//            x[11]-----<o:p></o:p>

//            x[12]-----公式<o:p></o:p>

              x=comment.split(",");<o:p></o:p>

              rd=new ReceiveData();<o:p></o:p>

              try{<o:p></o:p>

              rd.columnId=Long.parseLong(x[0]);<o:p></o:p>

              rd.recordKey1=Long.parseLong(x[1]);<o:p></o:p>

              rd.recordKey2=Long.parseLong(x[2]);<o:p></o:p>

              rd.timeType=Integer.parseInt(x[3]);<o:p></o:p>

              rd.dataValue=Integer.parseInt(x[4]);<o:p></o:p>

              rd.typeValue=Integer.parseInt(x[5]);<o:p></o:p>

              rd.yearValue=Integer.parseInt(x[6]);<o:p></o:p>

              rd.monthValue=Integer.parseInt(x[7]);<o:p></o:p>

              rd.DayValue=Integer.parseInt(x[8]);<o:p></o:p>

              rd.hourValue=Integer.parseInt(x[9]);<o:p></o:p>

              rd.minuteValue=Integer.parseInt(x[10]);<o:p></o:p>

              rd.formulaValue=Integer.parseInt(x[11]);<o:p></o:p>

              }catch(Exception e){<o:p></o:p>

                     System.err.println("Exception for OutBoundOfArray");<o:p></o:p>

                     e.printStackTrace();<o:p></o:p>

              }     <o:p></o:p>

<o:p> </o:p>

              sysColumnInfo=(SysColumnInfo) sysColumnInfoDao.find(rd.columnId);<o:p></o:p>

              sysTableInfo=(SysTableInfo) sysTableInfoDao.find(sysColumnInfo.getSysTableNo());<o:p></o:p>

              result=new StringBuffer();<o:p></o:p>

              result.append("select ");<o:p></o:p>

              result.append(sysColumnInfo.getSysColumnName().trim());<o:p></o:p>

              result.append(" from ");<o:p></o:p>

              result.append(sysTableInfo.getSysTableName());<o:p></o:p>

              result.append(" where ");<o:p></o:p>

              switch((sysColumnInfo.getSysObjectId()).intValue()){<o:p></o:p>

              case 1: //公司<o:p></o:p>

               result.append("COMPANY_ID =");             <o:p></o:p>

               result.append(rd.recordKey1);<o:p></o:p>

                  result.append(" AND ");<o:p></o:p>

               break;<o:p></o:p>

              case 2: //电厂<o:p></o:p>

                     result.append("POWER_PLANT_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 3://机组<o:p></o:p>

                     result.append("POWER_PLANT_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND MACHINE_NO =");<o:p></o:p>

                     result.append(rd.recordKey2);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 4://电网<o:p></o:p>

                     result.append("NET_AREA_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 5://省市<o:p></o:p>

                     result.append("REGION_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 6://省际联络线<o:p></o:p>

                     result.append("TIELINE_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 7://线路<o:p></o:p>

                     result.append("LINE_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;<o:p></o:p>

              case 8://变压器<o:p></o:p>

                     result.append("TRANSFORMER_ID =");<o:p></o:p>

                     result.append(rd.recordKey1);<o:p></o:p>

                     result.append(" AND ");<o:p></o:p>

                     break;                          <o:p></o:p>

              }<o:p></o:p>

              //处理时间<o:p></o:p>

              if(rd.dataValue<0){<o:p></o:p>

                     cal.add(cal.DATE,rd.DayValue);<o:p></o:p>

              }else if(rd.minuteValue<0){<o:p></o:p>

                     cal.add(cal.MONTH, rd.monthValue);<o:p></o:p>

              }else if(rd.yearValue<0){<o:p></o:p>

                     cal.add(cal.YEAR, rd.yearValue);<o:p></o:p>

              }<o:p></o:p>

              <o:p></o:p>

              switch(rd.timeType){<o:p></o:p>

              case 4: //时段<o:p></o:p>

                     periodId=rd.hourValue*4+(rd.minuteValue/15)+1;<o:p></o:p>

                     result.append(" YEAR= "+cal.get(cal.YEAR));<o:p></o:p>

                     result.append(" AND MONTH="+(cal.get(cal.MONTH)+1));<o:p></o:p>

                     result.append(" AND DAY="+cal.get(cal.DAY_OF_MONTH));<o:p></o:p>

//                   result.append(" AND PERIOD_ID="+periodId);<o:p></o:p>

                     result.append(" order by period_id");<o:p></o:p>

                     break;<o:p></o:p>

              case 5: //小时<o:p></o:p>

                     periodId=rd.hourValue*4+(rd.minuteValue/15)+1;<o:p></o:p>

                     result.append(" YEAR= "+cal.get(cal.YEAR));<o:p></o:p>

                     result.append(" AND MONTH="+(cal.get(cal.MONTH)+1));<o:p></o:p>

                     result.append(" AND DAY="+cal.get(cal.DAY_OF_MONTH));<o:p></o:p>

//                   result.append(" AND PERIOD_ID="+periodId);<o:p></o:p>

                     result.append(" order by period_id");<o:p></o:p>

                     break;<o:p></o:p>

              case 3: //                   <o:p></o:p>

                     result.append(" YEAR= "+cal.get(cal.YEAR));<o:p></o:p>

                     result.append(" AND MONTH="+(cal.get(cal.MONTH)+1));<o:p></o:p>

                     result.append(" AND DAY="+cal.get(cal.DAY_OF_MONTH));<o:p></o:p>

                     break;<o:p></o:p>

              case 2:<o:p></o:p>

                     result.append(" YEAR= "+cal.get(cal.YEAR));<o:p></o:p>

                     result.append(" AND MONTH="+(cal.get(cal.MONTH)+1));<o:p></o:p>

                     break;<o:p></o:p>

              case 1:<o:p></o:p>

                     result.append(" YEAR= "+cal.get(cal.YEAR));<o:p></o:p>

                     break;<o:p></o:p>

              }<o:p></o:p>

              return result.toString();         <o:p></o:p>

       }<o:p></o:p>

<o:p> </o:p>

}

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

加载Workbook,

Workbookpool.java

package org.eimhe.poi;<o:p></o:p>

<o:p> </o:p>

import java.io.FileInputStream;<o:p></o:p>

import java.util.concurrent.ConcurrentHashMap;<o:p></o:p>

<o:p> </o:p>

import org.apache.poi.hssf.usermodel.HSSFSheet;<o:p></o:p>

import org.apache.poi.hssf.usermodel.HSSFWorkbook;<o:p></o:p>

<o:p> </o:p>

public class WorkbookPool {<o:p></o:p>

       private static final String fileNames="日前竞价_.xls";<o:p></o:p>

       private static final ConcurrentHashMap sheets=new ConcurrentHashMap();     <o:p></o:p>

       private static FileInputStream fis;<o:p></o:p>

       private static HSSFWorkbook workbook;<o:p></o:p>

       <o:p></o:p>

<fo>

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值