【前言】
有一天,我用数据构建成这样一个表格----->>>
胰!!!
不对哦,那谁叫我合并前三类的分类汇总的,搞成这个鬼样子怎么收货
经过一查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);
}