`
荷戟者
  • 浏览: 274724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写的Java导出Excel组件

阅读更多

自己写的,记录下来,方便以后使用。

package org.wsr.utils;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;

import jxl.Workbook;
import jxl.format.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * 导出excel工具 110829
 * 
 * @author wangsr
 * 
 */
public class JXLUtils {
	
	/**
	 * 导出excel
	 * @param os 输出流
	 * @param data 导出数据,格式:list(0)为标题的名字,list(1..n)vo/po的属性
	 * 例如:
	 * list(0){"姓名","年龄","性别"}
	 * list(1..n){"张三","10","男"},{"李四","10","女"}
	 * @param sheetName sheet1的名字(暂时只有一个sheet)
	 * @throws Exception
	 */
	public static void exportExcel(OutputStream os, List<String[]> data,
			String sheetName) throws Exception {
		if (data == null || data.size() == 0) {
			throw new Exception("导出的数据不能为空!!");
		} else {
			// 创建工作簿
			try {
				WritableWorkbook wb = Workbook.createWorkbook(os);
				// 创建工作表
				WritableSheet sheet = wb.createSheet(sheetName, 0);
				//设置默认宽度
				sheet.getSettings().setDefaultColumnWidth(15);
				// 字体格式
				WritableFont wf = new WritableFont(WritableFont.ARIAL, 10,
						WritableFont.BOLD);
				WritableCellFormat wcf = new WritableCellFormat(wf);
				// 设置背景色
				wcf.setBackground(Colour.LIGHT_GREEN);
				// 对对齐方式
				wcf.setAlignment(jxl.format.Alignment.CENTRE);

				int count = 0;
				int[] len = new int[data.get(0).length];
				Iterator<String[]> iter = data.iterator();
				while (iter.hasNext()) {
					String[] temp = iter.next();
					// 单元格
					Label label = null;
					// 标题行,第一列为序号
					if (count == 0) {
						//标题行有特殊的格式(第一行)
						label = new Label(0, 0, "序号", wcf);
						sheet.addCell(label);
						for (int i = 0; i < temp.length; i++) {
							label = new Label(i+1, 0, temp[i], wcf);
							//设置列宽
							int tempLen = temp[i].getBytes().length;
							if (tempLen > len[i] && tempLen > 15) {
								//默认列宽为15,如果有大于15的列,则记下了,
								//并将该列设置为改宽度+4(效果好看点)【因为需求要求列必须容纳所有内容,而jxl不能自动适应列宽,所有手动设置】
								sheet.setColumnView(i+1, tempLen + 4);
								//每次都要记录下最大的列宽,方便添加新的一行数据时使用该值
								len[i] = tempLen;
							}
							sheet.addCell(label);
						}
						count++;
					} else {
						//第一列为序号
						jxl.write.Number labelNum = new jxl.write.Number(0, count, count);
						sheet.addCell(labelNum);
						// 内容列
						//列宽
						int tempLen = 0;
						for (int i = 0; i < temp.length; i++) {
							// 是数字的转化一下
							if (temp[i] != null && temp[i].trim().matches("[+-]?((0|([1-9]+[0-9]*))(\\.[0-9]+)?)")) {
								labelNum = new jxl.write.Number(i+1, count, Double.valueOf(temp[i]));
								sheet.addCell(labelNum);
							} else {
								label = new Label(i+1, count, temp[i]);
								sheet.addCell(label);
							}							
							// 设置列宽
							if (temp[i] != null){
								tempLen = temp[i].getBytes().length;
							}
							if (tempLen > len[i] && tempLen > 15) {
								sheet.setColumnView(i+1, tempLen + 1);
								len[i] = tempLen;
							}
						}
						count++;
					}
				}

				// 写出
				wb.write();
				wb.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (WriteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

  

3
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics