java excel 多列排序_java poi处理excel多sheet并实现排序

需求:有一个数据字典全量汇总表,其中第一个sheet为目录,包括编号和表名,第二个以后为表的明细。其中sheet名就是表名但无序,sheet内字段序号无序有空行

现在要求将其中101,104,107,111表中的格式列和字段名称以及表名取出,生成批量语句,要求按给的编号有序输出,字段出要有序并排除窄。

输出结果如下:

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','id','20180308001');

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','sal','2000');

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','20','张三');

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','remark','hello');

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','birthday','40479');

insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','age','20');

.

.

.

至111

excel如下:

9abc0b4e398ff25ef4ac6a2d97096976.png

3c927280987b93a434fd83d7002d7b25.png

下载poi包poi-3.17.jar并引入eclipse的java工程,仅需要RowInfo.java,ShowExcel.java

0bf56bc05273713c4e11144c59534982.png

RowInfo.java:

package pu;

public class RowInfo implements Comparable{//实现字段排序

private int rownumb;

private int expId;

private String tableName;

private String columnName;

private String formatInfo;

public RowInfo(int rownumb,int expId, String tableName, String columnName,String formatInfo) {

super();

this.rownumb=rownumb;

this.expId = expId;

this.tableName = tableName;

this.columnName=columnName;

this.formatInfo = formatInfo;

}

@Override

public String toString(){

return "insert into t_export(export_id,owner,table_name,col_name,format) values('"

+this.expId+"','SCOTT','"

+this.tableName+"','"

+this.columnName+"','"

+this.formatInfo+"');";

}

@Override

public int compareTo(RowInfo row) {//重写排序方法

// TODO Auto-generated method stub

return this.rownumb - row.rownumb;

}

public int getExpId() {

return expId;

}

public void setExpId(int expId) {

this.expId = expId;

}

public String getTableName() {

return tableName;

}

public void setTableName(String tableName) {

this.tableName = tableName;

}

public String getFormatInfo() {

return formatInfo;

}

public void setFormatInfo(String formatInfo) {

this.formatInfo = formatInfo;

}

public int getRownumb() {

return rownumb;

}

public void setRownumb(int rownumb) {

this.rownumb = rownumb;

}

public String getColumnName() {

return columnName;

}

public void setColumnName(String columnName) {

this.columnName = columnName;

}

}

ShowExcel.java

package pu;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.PrintStream;

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.Map;

import java.util.TreeMap;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

public class ShowExcel {

public static void showExcelSheet(Map map) throws Exception {//处理方法

HashMap hashmap = new HashMap();

//放入需求的表名

hashmap.put("T_A","101");

hashmap.put("T_D","104");

hashmap.put("T_G","107");

hashmap.put("T_K","111");

HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File("E:\\data\\Dictionary.xls")));

HSSFSheet sheet=null;

FileOutputStream fs = new FileOutputStream(new File("E:\\output\\temp.txt"),false);//每次都覆盖

PrintStream p = new PrintStream(fs);

p.println("sheet amount==="+workbook.getNumberOfSheets());

for (int i = 0; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表

sheet=workbook.getSheetAt(i);

ArrayList list_rows = new ArrayList<>();//每个sheet需new一个list

if (hashmap.containsKey(sheet.getSheetName()))

{

p.println("reading the sheet "+sheet.getSheetName());

for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {//获取每行

HSSFRow row=sheet.getRow(j);

if(row==null){//跳过空行

System.out.println("wowowo");

continue;

}

System.out.print("row amount=="+sheet.getPhysicalNumberOfRows()+" and now row"+j+"\t");

// p.print("table_name_"+sheet.getSheetName() +"\t");

if(j>2 && row.getCell(1)!=null){//此处跳过sheet中的前三行

p.print("table_name_"+sheet.getSheetName()+" row=="+j +"==\t");

p.print(hashmap.get(sheet.getSheetName()).toString() +"\t");

p.print(sheet.getSheetName() +"\t");

p.print(row.getCell(1).toString().toUpperCase()+"\t");

p.print(row.getCell(5)+"\t");

p.println();

//装载每行的序号,字段名称,格式

list_rows.add(new RowInfo((int)row.getCell(0).getNumericCellValue(),Integer.parseInt(hashmap.get(sheet.getSheetName()).toString()),sheet.getSheetName().toString(),row.getCell(1).toString().toUpperCase().trim(),row.getCell(5).toString()));

}

for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) {//获取每个单元格

if(row.getCell(k)!=null){

System.out.print(row.getCell(k)+"\t");

//p.print(row.getCell(k)+"\t");

}else

System.out.print("row.getCell(k) is nullnull"+"\t");

}

// p.println(" row over");

System.out.println("---Sheet表"+i+"处理完毕---");

}

p.println("---Sheet表"+i+"处理完毕---");

// 排序

Collections.sort(list_rows);

//读完一张装入一张

map.put(Integer.parseInt(hashmap.get(sheet.getSheetName()).toString()), list_rows);

}

}

p.close();

}

public static void main(String[] args) throws Exception{

FileOutputStream f = new FileOutputStream(new File("E:\\output\\result.txt"),false);

PrintStream rs = new PrintStream(f);

try{

Map map=new HashMap<>();

showExcelSheet(map);

Map treemap=new TreeMap<>();//实现结果表对象按export_id排序

treemap.putAll(map);

for(int k:treemap.keySet()){

System.out.println(k);

}

for(ArrayList tab :treemap.values()){

for(RowInfo row:tab){

rs.println(row.toString());

}

}

}catch(Exception e){e.printStackTrace();}

}

}

重构:以Java POI 导出EXCEL为例

重构 开头先抛出几个问题吧,这几个问题也是这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

java POI创建Excel示例(xslx和xsl区别 )

Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...

在java poi导入Excel通用工具类示例详解

转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36   作者:daochuwenziyao   我要评论   这篇文章主要给大家介绍了关于在j ...

JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签

个人说明:为了简单实现导出数据较少的EXCEL(根据自定义书签模板) 一.替换Excel表格标签方法```/** * 替换Excel模板文件内容 * @param map * 需要替换的标签建筑队形式 ...

java poi出excel换行问题

POI操作excel实现换行问题. package jp.co.misumi.mdm.batch.common.jobrunner; import java.io.FileInputStream; i ...

Java POI 导出EXCEL经典实现 Java导出Excel

转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

java poi操作excel 添加 锁定单元格保护

Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...

Java POI 导出excel表

1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/3895051 2.Student.java ...

Java POI读取Excel数据&comma;将数据写入到Excel表格

1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

随机推荐

Data URL简介及Data URL的利弊

之前写过一篇“漫谈前端优化”的文章,里面提到过DataUrl,粗鲁的描述了下,感觉不甚详焉,所以这几天也总结了这方面的知识,参考一些资料,补充一篇文章在这里,对这方面的资料来说,也是一种强化记忆应用: ...

&lbrack;20140722&rsqb; forwarded和forwarding记录

背景: 今天被人文集forwarded和forwarding记录的事情. 简单介绍: 当堆表跟新某一个列的时候发现,不够放了,那么就在那行记录上标记forwarding,并把数据放到另外一个page, ...

XE6移动开发环境搭建之IOS篇(5):解决Windows和虚拟机下Mac OSX的共享问题(有图有真相)

网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 在安装XE6 PAS ...

Asp&period;net MVC4之 一个简单的小例子

练习: 新建一个mvc项目 要求: 有3个视图  Login Index Details 目的:感受一下MVC与传统WebForm的差异性 WebForm的请求模型 MVC请求模型 传统WebForm ...

codefirst mvc Self referencing loop detected for property

登录时,json序列化用户类时提示错误"Self referencing loop detected for property--",经过5个小时的查找,发现原因可能是,用户类包含 ...

Patterns for application development with ASP&period;NET Core

此文章翻译自 NDC { London } 16-20 January 2017 上, Damian Edwards和David Fowler的演讲,如果翻译不周,请大家指出错误. Logging 生 ...

mui开发app之联网应用传输数据

手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...

前端面试题-----js和jquery的区别是什么?

最近我有一个朋友问我js和jquery的区别是什么,于是我打算写一篇文章说下到底有什么区别. 首先你要知道: 1.js是网页的脚本语言,记住哈,js是语言! 2.jquery是用js语言写出来的一个框 ...

WebWorker 简单使用方式

WebWorker 一定程度上可以算得上是浏览器中的多线程技术了,在项目中适当使用 Worker 来做一些耗时的操作能大大提高页面整体流畅度. Worker的使用也是非常简单的,通过向 Worker ...