首页> 软件工程> 我用 JXL 操作excle操作二维表的日子

[文章]我用 JXL 操作excle操作二维表的日子

收藏
0 625 0

【前言】word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(255,="" 255,="" 255);"="" style="line-height: 24px;">       

有一天,我用数据构建成这样一个表格----->>>


word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(255,="" 255,="" 255);"="">【正文】word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(255,="" 255,="" 255);"="">

word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(255,="" 255,="" 255);"="">word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(255,="" 255,="" 255);"="">功能分析:  

胰!!!

不对哦,那谁叫我合并前三类的分类汇总的,搞成这个鬼样子怎么收货

经过一查jxl api 莫急,关键在于这个方法,直接上代码

 // 声明工作簿jxl.write.WritableWorkbook WritableWorkbook wwb;  

//根据传进来的file对象创建可写入的Excel工作薄 

 OutputStream os = response.getOutputStream(); wwb = Workbook.createWorkbook(os);

 /* * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 * 代码中的"0"就是sheet1、其它的一一对应。 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 */ 

 WritableSheet ws = wwb.createSheet(sheetName, 0); 

ws.mergeCells(n,m,g,b);//这里注意: n 单元格的列号,m 单元格的行号,g 从单元格[n,m]起,向下合并到g列,b 从单元格[n,m]起,向下合并到 b行 

//单元格的列号和行号都是从0开始计

懂了没有??

像我这个表格只需要合并行嘛,索性把列写死就得啦 例如:ws.mergeCells(i,j,i,k); i就是写死的列,j k自己定义

但是你要找出来每一列哪一条数据相同啊。easy喇,直接上代码

//获取要合并的单元格列角标 

 public static List<int []> locateAllAndPrint(String[] temp) { 

 List<int []> list=new ArrayList<int[]>(); for (int i = 0; i < temp.length; i++) { String h = temp[i]; boolean repeated = false; for (int j = 0; j < i; j++) { if (temp[j].equals(h)) { repeated = true; break; } } if (!repeated) { StringBuffer sb = new StringBuffer(); ArrayList<Integer> lst=new ArrayList<Integer>(); for (int j = 0; j < temp.length; j++) { if (h.equals(temp[j])) { sb.append(", ").append(j+2); lst.add(j+2); } } int[] arr=new int[lst.size()]; for(int z=0,j=lst.size();z<j;z++){ arr[z]=lst.get(z); } if (arr.length>1) { list.add(getMaxandMix(arr)); } sb.delete(0, 2).insert(0, " --> [").insert(0, h).append(']'); sb.delete(0, 2).insert(0, "[").insert(0, h).append(']'); System.out.println(sb.toString()); } }

 return list;

 }

 //获取最大和最小值

 public static int[] getMaxandMix(int[] t) {

 int[] ret=new int[2]; int i,min,max; int A[]=t;

 // 声明整数数组A,并赋初值 min=max=A[0]; System.out.print("数组A的元素包括:"); 

 for(i=0;i<A.length;i++) { System.out.print(A[i]+" "); 

 if(A[i]>max) // 判断最大值 max=A[i]; if(A[i]<min)

 // 判断最小值 min=A[i]; }

 System.out.println("\n数组的最大值是:"+max); 

// 输出最大值 System.out.println("数组的最小值是:"+min); 

// 输出最小值 ret[0]=min; ret[1]=max;

 return ret;

 }


//最后得出 要合并的列角标 

List<int []> merList=locateAllAndPrint(temp); 

 for (int[] merge_row : merList) {

 int j=merge_row[0]; 

 int k=merge_row[1];

 if (j<k)ws.mergeCells(i,j,i,k);

 }

结果截图:

  

软件工程
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}