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

jxl 做的报表通用方法

阅读更多
ExcelUtilToolTest.java
package com.sobey.pms.util.excel;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

/**
 * <p>Title: TestExcelUtilTool.java</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2009 Sobey,Inc</p>
 * <p>Company: Sobey.Inc</p>
 * @author yaobo 2010-8-9
 * @version 1.0
 */
public class ExcelUtilToolTest extends TestCase{
	public void testCreateExcel(){
		List datas = new ArrayList();
		for (int i = 0; i < 10; i++){
			Data data = new Data("名字" + i, "地址" + i, "公司" + i);
			datas.add(data);
		}
		
		ExcelExportInfo info=null;
	   	String footer[][]=new String[1][2];
	   	footer[0][0]=""; //footer[0][0] 是文本内容,footer[0][1]为文本占的列数
	   	footer[0][1]="3";   
	   	info = new ExcelExportInfo();
	   	info.setColumnHeader("名字, 地址, 公司");
	   	info.setDatas(datas); //list (是po\vo)
	   	info.setFeilds("name,address,company"); // list 集合中对象的feilds
	   	info.setTitle("人员信息"); //设置title,如果为空则excel无标题
	   	info.setFooter(footer); // footer
	   	info.setWidth(new int[]{50, 50, 50}); // int数组为int类型, 为null 取默认宽度20,
	   	
	   	ExcelUtilTool util=new ExcelUtilTool();
	   	ByteArrayOutputStream  tt = util.writeExcelStream(info);
	   	
	   	try{
	   		FileOutputStream pos = new FileOutputStream("c:/test.xls");
	   		pos.write(tt.toByteArray());
	   		tt.close();
	   		pos.close();
	   	}catch (Exception ex){
	   		assert(false);
	   		ex.printStackTrace();
	   	}
	   	assert(true);
	}
}

class Data{
	String name;
	String address;
	String company;
	
	public Data(String name, String address, String company) {
		super();
		this.name = name;
		this.address = address;
		this.company = company;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	
	
}

 

ExcelUtilTool.java

package com.sobey.pms.util.excel;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.apache.log4j.Logger;

import com.sobey.esda.utils.ReflectionUtils;

/**
 * 
 * 通用Excel处理类

 * 
 * 
 */
public class ExcelUtilTool {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(ExcelUtilTool.class);

	/**
	 * 得到 Excel 报表数据的字节

	 * 
	 * @param reportTitle
	 *            报表的标题

	 * 
	 * @param dataInArr
	 *            String[][] 输入的待显示数据数组
	 * @param param_width
	 *            int[] 每列列宽
	 * 
	 * @param columnHeader
	 *            列头标题
	 * 
	 * @param columnFooter
	 *            脚眉 [0]=数据,[1]=表示占有宽度 为 1,2,3,..
	 * 
	 * @param report_format
	 *            String[] 报表显示 格式数组{"","",""}
	 * @throws Exception
	 */
	public byte[] writeExcelReport(String ReportTitle[][],
			String columnHeader[], String dataInArr[][],
			String columnFooter[][], int param_width[]) throws Exception {
		ByteArrayOutputStream bufferOb = null; // 直接输出到流中

		bufferOb = writeExcelStream(ReportTitle, columnHeader, dataInArr,
				columnFooter, param_width);
		if (bufferOb != null)
			return bufferOb.toByteArray();
		else
			return null;
	}

	/**
	 * 
	 * @param ops
	 * @return
	 */
	private WritableWorkbook createWorkBook(OutputStream ops) {
		try {
			return Workbook.createWorkbook(ops);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 
	 * @param workbook
	 * @param sheetName
	 * @param index
	 * @return
	 */
	private WritableSheet createSheet(WritableWorkbook workbook,
			String sheetName, int index) {
		if (workbook == null)
			return null;
		return workbook.createSheet(sheetName, index);
	}

	/**
	 * 
	 * @param ws
	 * @param reportTitle
	 * @throws WriteException
	 * @throws RowsExceededException
	 */
	private void createExcelTitle(WritableSheet ws, String reportTitle[][],
			int len) throws RowsExceededException, WriteException {
		if (ws == null || reportTitle == null)
			return;
		WritableFont boldBigWTF = new WritableFont(WritableFont.ARIAL, 30,
				WritableFont.BOLD);
		WritableFont boldNormalWTF = new WritableFont(WritableFont.ARIAL,
				WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD);
		// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle[x][2],对齐方式:left,center,right
		for (int i = 0; i < reportTitle.length; i++) {
			ws.mergeCells(0, i, (len - 1), i); // 合并标题单元格

			WritableCellFormat reportheader = null;
			if (i == 0) {
				reportheader = new WritableCellFormat(boldBigWTF);
			} else {
				reportheader = new WritableCellFormat(boldNormalWTF);
			}

			reportheader.setBorder(Border.NONE, BorderLineStyle.NONE);
			if (reportTitle[i][1].equalsIgnoreCase("left")) {
				reportheader.setAlignment(Alignment.LEFT);
			} else if (reportTitle[i][1].equalsIgnoreCase("center")) {
				reportheader.setAlignment(Alignment.CENTRE);
			} else if (reportTitle[i][1].equalsIgnoreCase("right")) {
				reportheader.setAlignment(Alignment.RIGHT);
			}

			Label lable = new Label(0, i, reportTitle[i][0], reportheader);
			ws.addCell(lable);
			lable = null;
		}
	}

	/**
	 * 
	 * @param ws
	 * @param columnHeader
	 * @param list_start
	 * @throws WriteException
	 */
	private void createColumnHeader(WritableSheet ws, String columnHeader[],
			int list_start) throws WriteException {
		if (ws == null || columnHeader == null)
			return;
		WritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象
		WritableCellFormat cellheader = new WritableCellFormat(wfc);
		cellheader.setBackground(Colour.GRAY_25);
		cellheader.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
		// 填充columnHeader字段及样式

		for (int i = 0; i < columnHeader.length; i++) {
			Label lable = new Label(i, list_start, columnHeader[i], cellheader);
			ws.addCell(lable);
			lable = null;
		}
	}

	/**
	 * 
	 * @param ws
	 * @param data
	 * @param list_start
	 * @throws WriteException
	 */
	private void fillInData(WritableSheet ws, String data[][], int list_start)
			throws WriteException {
		if (ws == null || data == null)
			return;

		int dataInArr_row = data.length;
		int dataInArr_col = data[0].length;
		WritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象
		WritableCellFormat wcfFC = new WritableCellFormat(wfc);
		for (int i = 0; i < dataInArr_row; i++) {
			for (int j = 0; j < dataInArr_col; j++) {
				Label lable = new jxl.write.Label(j, (i + list_start + 1),
						data[i][j], wcfFC);
				ws.addCell(lable);
				lable = null;
			}
		}
	}

	/**
	 * 
	 * @param ws
	 * @param columnFooter
	 * @param rowStart
	 * @throws WriteException
	 * @throws RowsExceededException
	 */
	private void createFooter(WritableSheet ws, String columnFooter[][],
			int rowStart) throws RowsExceededException, WriteException {
		if (ws == null || columnFooter == null)
			return;
		// 填充columnFooter字段及统计,一维是字串,二维是格式(跨度):columnFooter[x][2]
		WritableFont wfc = new WritableFont(WritableFont.ARIAL); // 设置字体对象
		WritableCellFormat wcfFC = new WritableCellFormat(wfc);
		if (columnFooter != null) {
			int columnFooterWidth = columnFooter.length;
			int tmpInt = 0, summergeNum = 0;
			for (int i = 0; i < columnFooterWidth; i++) {
				tmpInt = Integer.parseInt(columnFooter[i][1]);
				summergeNum += tmpInt;
				if (tmpInt > 1) {
					ws.mergeCells((summergeNum - tmpInt), (rowStart + 1),
							(summergeNum - 1), (rowStart + 1)); // 合并单元格

				}
				Label lable = new Label((summergeNum - tmpInt), (rowStart + 1),
						columnFooter[i][0], wcfFC);
				ws.addCell(lable);
				lable = null;
			}
		}
	}

	/**
	 * 
	 * @param info
	 * @return
	 * @throws Exception
	 */
	public ByteArrayOutputStream writeExcelStream(ExcelExportInfo info) {
		if (logger.isDebugEnabled()) {
			logger.debug("writeExcelStream(ExcelExportInfo) - start");
		}

		if (info == null || info.getDatas() == null
				|| info.getColumnHeader() == null || info.getFeilds() == null) {
			if (logger.isDebugEnabled()) {
				logger.debug("info is null");
				logger.debug("writeExcelStream(ExcelExportInfo) - end");
			}
			return null;
		}
		String title[][] = null;
		String datas[][] = null;
		String feilds[] = info.getFeilds();
		List list = info.getDatas();

		int rows = list.size();
		int columns = info.getFeilds().length;

		if (logger.isDebugEnabled()) {
			logger.debug(" rows : " + rows + " columns:" + columns);
		}
		if (rows == 0 || columns == 0)
			return null;

		if (info.getTitle() != null) {
			title = new String[1][2];
			title[0][0] = info.getTitle();
			title[0][1] = "center";
			if (title[0][0] == null)
				title[0][0] = "Excel报表打印";
		}

		datas = new String[rows][];

		for (int i = 0; i < rows; i++) {
			Object obj = list.get(i);
			if (obj == null)
				continue;
			datas[i] = new String[columns];
			for (int j = 0; j < columns; j++) {
				datas[i][j] = getParameter(obj, feilds[j]);
			}
		}

		ByteArrayOutputStream returnByteArrayOutputStream = null;

		try {
			returnByteArrayOutputStream = this.writeExcelStream(title, info
					.getColumnHeader(), datas, info.getFooter(), info
					.getWidth());
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (logger.isDebugEnabled()) {
			logger.debug("writeExcelStream(ExcelExportInfo) - end");
		}
		return returnByteArrayOutputStream;
	}

	/**
	 * 
	 * @param obj
	 * @param attr
	 * @return
	 */
	private String getParameter(Object obj, String attr) {
		String value = null;
		Object valuObj = ReflectionUtils.invokeGetterMethod(obj, attr);
		value = (valuObj == null) ? null : valuObj.toString();
		return value;
	}

	/**
	 * 
	 * 得到excel报表数据的字节流
	 * 
	 * @param ReportTitle
	 * @param columnHeader
	 * @param dataInArr
	 * @param columnFooter
	 * @param param_width
	 * @throws Exception
	 */
	public ByteArrayOutputStream writeExcelStream(String reportTitle[][],
			String columnHeader[], String datas[][], String columnFooter[][],
			int paramWidth[]) throws Exception {
		ByteArrayOutputStream bufferOb = new ByteArrayOutputStream(); // 直接输出到字节流中(内存中)
		int i = 0;
		int list_start = 3; // 列表数据从第4行开始写(默认)
		int default_column_width = 20; // 表格默认宽度
		int dataInArr_row = (datas == null) ? 0 : datas.length; // 得到数组行数
		int dataInArr_col = (datas == null) ? 0 : datas[0].length; // 得到数组列数

		if (dataInArr_col == 0 && paramWidth != null) {
			dataInArr_col = paramWidth.length;
		} else if (dataInArr_col == 0)
			dataInArr_col = 1;

		if (paramWidth == null) {
			paramWidth = new int[dataInArr_col];
			for (i = 0; i < dataInArr_col; i++) {
				paramWidth[i] = default_column_width;
			}
		}
		WritableWorkbook wwb = createWorkBook(bufferOb); // 建立excel工作空间
		WritableSheet ws = createSheet(wwb, "报表显示(打印)", 0); // 建立报表表单

		// 设置表格宽度
		for (i = 0; i < dataInArr_col; i++) {
			ws.setColumnView(i, paramWidth[i]);
		}
		// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle[x][2],对齐方式:left,center,right
		int reportTitleLen = reportTitle == null ? 0 : reportTitle.length;
		list_start = reportTitleLen;

		this.createExcelTitle(ws, reportTitle, dataInArr_col);
		this.createColumnHeader(ws, columnHeader, list_start); // list_start从多少行开始写数据
		this.fillInData(ws, datas, list_start);
		this.createFooter(ws, columnFooter, dataInArr_row + list_start);

		wwb.write();
		wwb.close();
		reportTitle = null;
		columnHeader = null;
		datas = null;
		columnFooter = null;
		paramWidth = null;
		return bufferOb;
	}

	/**
	 * 
	 * @param info
	 * @return
	 * @throws Exception
	 */
	public void writeExcel(OutputStream stream, ExcelExportInfo info) {
		if (logger.isDebugEnabled()) {
			logger.debug("writeExcelStream(ExcelExportInfo) - start");
		}

		if (info == null || info.getDatas() == null
				|| info.getColumnHeader() == null || info.getFeilds() == null) {
			if (logger.isDebugEnabled()) {
				logger.debug("info is null");
				logger.debug("writeExcelStream(ExcelExportInfo) - end");
			}
			return;
		}
		String title[][] = null;
		String datas[][] = null;
		String feilds[] = info.getFeilds();
		List list = info.getDatas();

		int rows = list.size();
		int columns = info.getFeilds().length;

		if (logger.isDebugEnabled()) {
			logger.debug(" rows : " + rows + " columns:" + columns);
		}
		if (rows == 0 || columns == 0)
			return;

		if (info.getTitle() != null) {
			title = new String[1][2];
			title[0][0] = info.getTitle();
			title[0][1] = "center";
			if (title[0][0] == null)
				title[0][0] = "Excel报表打印";
		}

		datas = new String[rows][];

		for (int i = 0; i < rows; i++) {
			Object obj = list.get(i);
			if (obj == null)
				continue;
			datas[i] = new String[columns];
			for (int j = 0; j < columns; j++) {
				datas[i][j] = getParameter(obj, feilds[j]);
			}
		}

		try {
			this.writeExcel(stream, title, info.getColumnHeader(), datas, info
					.getFooter(), info.getWidth());
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (logger.isDebugEnabled()) {
			logger.debug("writeExcelStream(ExcelExportInfo) - end");
		}
	}

	/**
	 * 
	 * 得到excel报表数据的字节流
	 * 
	 * @param ReportTitle
	 * @param columnHeader
	 * @param dataInArr
	 * @param columnFooter
	 * @param param_width
	 * @throws Exception
	 */
	public void writeExcel(OutputStream stream, String reportTitle[][],
			String columnHeader[], String datas[][], String columnFooter[][],
			int paramWidth[]) throws Exception {
		int i = 0;
		int list_start = 3; // 列表数据从第4行开始写(默认)
		int default_column_width = 20; // 表格默认宽度
		int dataInArr_row = (datas == null) ? 0 : datas.length; // 得到数组行数
		int dataInArr_col = (datas == null) ? 0 : datas[0].length; // 得到数组列数

		if (dataInArr_col == 0 && paramWidth != null) {
			dataInArr_col = paramWidth.length;
		} else if (dataInArr_col == 0)
			dataInArr_col = 1;

		if (paramWidth == null) {
			paramWidth = new int[dataInArr_col];
			for (i = 0; i < dataInArr_col; i++) {
				paramWidth[i] = default_column_width;
			}
		}
		WritableWorkbook wwb = createWorkBook(stream); // 建立excel工作空间
		WritableSheet ws = createSheet(wwb, "报表显示(打印)", 0); // 建立报表表单

		// 设置表格宽度
		for (i = 0; i < dataInArr_col; i++) {
			ws.setColumnView(i, paramWidth[i]);
		}
		// 填充报表标题,一维是字串,二维是格式(对齐方式):ReportTitle[x][2],对齐方式:left,center,right
		int reportTitleLen = reportTitle == null ? 0 : reportTitle.length;
		list_start = reportTitleLen;

		this.createExcelTitle(ws, reportTitle, dataInArr_col);
		this.createColumnHeader(ws, columnHeader, list_start); // list_start从多少行开始写数据
		this.fillInData(ws, datas, list_start);
		this.createFooter(ws, columnFooter, dataInArr_row + list_start);

		wwb.write();
		wwb.close();
		reportTitle = null;
		columnHeader = null;
		datas = null;
		columnFooter = null;
		paramWidth = null;
	}

	/**
	 * 读excel表格中文字

	 * 
	 * @param fileName
	 * @param x
	 * @param y
	 * @throws Exception
	 */
	public String readExcelCell(String fileName, int x, int y) throws Exception {
		File f = new File(fileName);
		InputStream os = new FileInputStream(f);
		jxl.Workbook book = Workbook.getWorkbook(os);
		jxl.Sheet sheet = book.getSheet(0);
		Cell cell1 = sheet.getCell(x, y);
		String result = cell1.getContents();
		book.close();
		return result;
	}

	/**
	 * 读excel表格中文字

	 * 
	 * @param book
	 * @param x
	 * @param y
	 * @throws Exception
	 */
	public String readExcelCell(Workbook book, int x, int y) throws Exception {
		jxl.Sheet sheet = book.getSheet(0);
		Cell cell1 = sheet.getCell(x, y);
		String result = cell1.getContents();
		return result;
	}

	/**
	 * 把excel数据读入到数组中
	 * 
	 * @param fileName
	 * @param sheetNo
	 *            工作表顺序号,默认为0
	 * @param x_start
	 *            左面开始的列数
	 * @param y_start
	 *            头开始的行数
	 * @param width
	 *            如果宽度为0(默认),就读出所有列
	 * @param height
	 *            如果高度为0(默认),就读出所有行
	 * @throws Exception
	 */
	public String[][] readExcel(String fileName, int sheetNo, int x_start,
			int y_start, int columns, int rows) throws Exception {
		// 数据校正
		if (sheetNo < 0)
			sheetNo = 0;
		if (x_start < 0)
			x_start = 0;
		if (y_start < 0)
			y_start = 0;

		Workbook book = null;
		Sheet sheet = null; // 获得第一个工作表对象
		int tmpInt = 0;

		book = this.getWorkBook(fileName);
		if (book == null)
			return null;
		sheet = book.getSheet(sheetNo);
		tmpInt = sheet.getColumns();

		if (columns == 0 || columns > tmpInt)
			columns = tmpInt;
		tmpInt = sheet.getRows();

		if (rows == 0 || rows > tmpInt)
			rows = tmpInt;
		String[][] reArr = new String[rows][columns];
		for (int y = 0; y < rows; y++) {
			for (int x = 0; x < columns; x++) {
				int cel_x = x_start + x;
				int cel_y = y_start + y;
				reArr[y][x] = sheet.getCell(cel_x, cel_y).getContents(); // cel_x,列

																			// cel_y
																			// 行

			}
		}
		book.close();
		return reArr;
	}

	/**
	 * 把excel数据读入到数组中
	 * 
	 * @param inputstream
	 * @param sheetNo
	 *            工作表顺序号,默认为0
	 * @param x_start
	 *            左面开始的列数
	 * @param y_start
	 *            头开始的行数
	 * @param width
	 *            如果宽度为0(默认),就读出所有列
	 * @param height
	 *            如果高度为0(默认),就读出所有行
	 * @throws Exception
	 */
	public String[][] readExcel(InputStream ins, int sheetNo, int x_start,
			int y_start, int width, int height) throws Exception {
		// 数据校正
		if (sheetNo < 0)
			sheetNo = 0;
		if (x_start < 0)
			x_start = 0;
		if (y_start < 0)
			y_start = 0;
		Workbook book = null;
		Sheet sheet = null; // 获得第一个工作表对象
		int tmpInt = 0;

		book = this.getWorkBook(ins);
		if (book == null)
			return null;
		sheet = book.getSheet(sheetNo);
		tmpInt = sheet.getColumns();
		if (width == 0 || width > tmpInt)
			width = tmpInt;
		tmpInt = sheet.getRows();
		if (height == 0 || height > tmpInt)
			height = tmpInt;
		String[][] reArr = new String[width][height];
		int x = 0, y = 0;
		for (x = x_start; x < (x_start + width); x++) {
			for (y = y_start; y < (y_start + height); y++) {
				reArr[x][y] = sheet.getCell(x, y).getContents();
			}
		}
		book.close();
		return reArr;
	}

	/**
	 * 
	 * @param ins
	 * @return
	 */
	public Workbook getWorkBook(InputStream ins) {
		Workbook book = null;
		try {
			book = Workbook.getWorkbook(ins);
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return book;
	}

	/**
	 * 
	 * @param ins
	 * @return
	 */
	public Workbook getWorkBook(String fileName) {
		File file = null;
		InputStream is = null;

		if (fileName == null)
			return null;

		file = new File(fileName);

		if (!file.exists())
			return null;
		try {
			is = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return this.getWorkBook(is);
	}

	/**
	 * 写数组数据到excel
	 * 
	 * @param fileName
	 *            写入的excel文件明

	 * @param sheetNo
	 *            工作表顺序号,默认为0
	 * @param sheetName
	 *            工作表名
	 * @param x_start
	 *            左面开始的列数
	 * @param y_start
	 *            头开始的行数
	 * @param columnW
	 *            列宽
	 * @param inputArr
	 *            输入的数组

	 * @param maxPerPage
	 *            每页最大记录数(最大记录数为10000)
	 * @throws Exception
	 */
	public void writeExcel(String fileName, int sheetNo, String sheetName,
			int x_start, int y_start, int columnW, String[][] inputArr,
			int maxPerPage) throws Exception {
		// 数据校正
		if (sheetNo < 0)
			sheetNo = 0;
		if (sheetName == null)
			sheetName = "数据列表";
		if (x_start < 0)
			x_start = 0;
		if (y_start < 0)
			y_start = 0;
		if (columnW < 0)
			columnW = 10;
		if (maxPerPage < 0 || maxPerPage > 10000) {
			maxPerPage = 10000;
			System.out.println("每页最大记录数超出最大数10000,改为10000输出");
		}

		// 数据写入excel
		int dataStart = 0; // 数据行开始

		int dataEnd = 0; // 数据行结束

		if (inputArr != null && inputArr.length > 0) {
			int inputArrLength = inputArr[0].length; // 数据行数
			int loop = 0;
			if (inputArrLength % maxPerPage == 0) {
				loop = inputArrLength / maxPerPage;
			} else {
				loop = inputArrLength / maxPerPage + 1;
			}
			int baseYstart = y_start;
			String fileExtName = fileName.substring(fileName.lastIndexOf("."));
			String filePathName = fileName.replaceAll(fileExtName, "");
			for (int i = 0; i < loop; i++) {
				dataStart = i * maxPerPage;
				y_start = baseYstart + dataStart;
				dataEnd = dataStart + maxPerPage;
				if (dataEnd >= inputArrLength) {
					dataEnd = inputArrLength;
				}
				if (i > 0) {
					fileName = filePathName + " (" + i + ")" + fileExtName;
				}
				writeExcel(fileName, sheetNo, sheetName, x_start, baseYstart,
						columnW, inputArr, dataStart, dataEnd);
			}
		}
		inputArr = null;
	}

	/**
	 * 写数组数据到excel
	 * 
	 * @param fileName
	 * @param sheetNo
	 * @param sheetName
	 * @param x_start
	 * @param y_base
	 * @param columnW
	 * @param inputArr
	 * @param dataStart
	 * @param dataEnd
	 * @throws Exception
	 */
	private void writeExcel(String fileName, int sheetNo, String sheetName,
			int x_start, int y_base, int columnW, String[][] inputArr,
			int dataStart, int dataEnd) throws Exception {
		File os = new File(fileName);
		if (os.exists()) {
			if (!os.delete()) {
				throw new Exception("文件已经存在,并且不能删除");
			}
		}
		WritableWorkbook book = null;
		WritableSheet ws = null;
		if (os.createNewFile()) {
			book = Workbook.createWorkbook(os);
			ws = book.createSheet(sheetName, sheetNo);
		} else {
			throw new Exception("文件创建失败");
		}
		if (inputArr != null && inputArr.length > 0) {
			int inputArrWidth = inputArr.length;
			int x = 0, y = 0;
			for (x = 0; x < inputArrWidth; x++) {
				ws.setColumnView((x + x_start), columnW); // 设置列宽
				for (y = dataStart; y < dataEnd; y++) {
					Label lb = new Label((x + x_start),
							(y - dataStart + y_base), inputArr[x][y]);
					ws.addCell(lb);
				}
			}
		}
		book.write();
		book.close();
		inputArr = null;
	}

	/**
	 * 写数组数据到excel文件中

	 * 
	 * @param sheetNo
	 * @param sheetName
	 * @param x_start
	 * @param y_base
	 * @param columnW
	 * @param inputArr
	 * @throws Exception
	 */
	public void writeExcel(String fileName, int sheetNo, String sheetName,
			int x_start, int y_base, int columnW, String[][] inputArr)
			throws Exception {
		File os = new File(fileName);
		if (os.exists()) {
			if (!os.delete()) {
				throw new Exception("文件已经存在,并且不能删除");
			}
		}
		WritableWorkbook book = null;
		WritableSheet ws = null;
		if (os.createNewFile()) {
			book = Workbook.createWorkbook(os);
			ws = book.createSheet(sheetName, sheetNo);
		} else {
			throw new Exception("文件创建失败");
		}
		if (inputArr != null && inputArr.length > 0) {
			int inputArrWidth = inputArr.length;
			int inputArrHeight = inputArr[0].length;
			int x = 0, y = 0;
			for (x = 0; x < inputArrWidth; x++) {
				ws.setColumnView((x + x_start), columnW); // 设置列宽
				for (y = 0; y < inputArrHeight; y++) {
					Label lb = new Label((x + x_start), (y + y_base),
							inputArr[x][y]);
					ws.addCell(lb);
				}
			}
		}
		book.write();
		book.close();
		inputArr = null;
	}

	/**
	 * 写数组数据到excel流中
	 * 
	 * @param sheetNo
	 * @param sheetName
	 * @param x_start
	 * @param y_base
	 * @param columnW
	 * @param inputArr
	 * @throws Exception
	 */
	public ByteArrayOutputStream writeExcelStream(int sheetNo,
			String sheetName, int x_start, int y_base, int columnW,
			String[][] inputArr) throws Exception {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		WritableWorkbook book = null;
		WritableSheet ws = null;
		book = Workbook.createWorkbook(os);
		ws = book.createSheet(sheetName, sheetNo);
		if (inputArr != null && inputArr.length > 0) {
			int inputArrWidth = inputArr.length;
			int inputArrHeight = inputArr[0].length;
			int x = 0, y = 0;
			for (x = 0; x < inputArrWidth; x++) {
				ws.setColumnView((x + x_start), columnW); // 设置列宽
				for (y = 0; y < inputArrHeight; y++) {
					Label lb = new Label((x + x_start), (y + y_base),
							inputArr[x][y]);
					ws.addCell(lb);
				}
			}
		}
		book.write();
		book.close();
		inputArr = null;
		return os;
	}

	public byte[] writeExcel(int sheetNo, String sheetName, int x_start,
			int y_base, int columnW, String[][] inputArr) throws Exception {
		return writeExcelStream(sheetNo, sheetName, x_start, y_base, columnW,
				inputArr).toByteArray();
	}
}

 ExcelExportInfo.java

 

package com.sobey.pms.util.excel;

import java.util.List;

public class ExcelExportInfo {
	private List datas;

	private String columnHeader[];

	private String feilds[];

	private String footer[][];

	private String title;

	private int width[];

	private String fileName = "ExcelExport.xls";

	public String[] getColumnHeader() {
		return columnHeader;
	}

	public void setColumnHeader(String[] columnHeader) {
		this.columnHeader = columnHeader;
	}

	public void setColumnHeader(String columnHeaders) {
		if (columnHeaders != null)
			this.columnHeader = columnHeaders.split(",");
		else
			this.columnHeader = null;
	}

	public List getDatas() {
		return datas;
	}

	public void setDatas(List datas) {
		this.datas = datas;
	}

	public String[] getFeilds() {
		return feilds;
	}

	public void setFeilds(String[] feilds) {
		this.feilds = feilds;
	}

	public void setFeilds(String feilds) {
		if (feilds != null)
			this.feilds = feilds.split(",");
		else
			this.feilds = null;
	}

	public String[][] getFooter() {
		return footer;
	}

	public void setFooter(String[][] footer) {
		this.footer = footer;
	}

	public int[] getWidth() {
		return width;
	}

	public void setWidth(int[] width) {
		this.width = width;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
}

 

 

 

分享到:
评论

相关推荐

    jxl读取Excel报表

    标题中的“jxl读取Excel报表”指的是利用jxl库来操作Excel文件,特别是从Excel文件中提取数据以进行分析或进一步处理。以下是对这个主题的详细讲解: 首先,`jxl.jar`是jxl库的主要组件,它支持读取和写入Microsoft...

    对任何数据库通用的报表很强大的

    尽管它的名字中含有“Excel”,但这里提到的“可以对任何数据库做报表”可能是指利用JXL将从数据库中获取的数据导出到Excel格式的报表中。JXL提供了一系列API,使得开发人员可以方便地创建、修改和读取Excel工作簿、...

    JAVA中excel导入导出通用方法

    JAVA 中 excel 导入导出通用方法可以应用于各种需要 excel 文件交互的业务场景中,例如报表生成、数据导出等。该方法可以提高项目的开发效率和灵活性。 十、扩展阅读 * jxl 库的使用 * excel 文件的读写操作 * ...

    jxl资源包,用于Excel导入导出

    `common`目录可能包含了库中的一些通用工具类或资源,这些类可能被jxl库的多个部分共同使用,以提高代码的复用性和效率。 总的来说,jxl资源包是一个强大的Java工具,它使得在应用程序中处理Excel文件的工作变得...

    JXL导出Excel数据表

    在描述中提到的"封装了一个简单易用、通用、动态的方法",指的是开发者可以通过自定义方法,根据需求灵活控制导出的数据内容。 动态指定导出列、显示名字和顺序是JXL的一个重要特性。在实际应用中,这通常通过遍历...

    jxl 读取Excel模板并写入数据通用工具类

    本文将详细讨论如何使用JXL库创建一个通用的工具类来读取Excel模板并填充数据。 首先,我们需要了解JXL库的基本用法。JXL库提供了多种API,可以用来操作Excel文件的各个部分,包括工作簿(Workbook)、工作表...

    jxl包docs帮助文件网页

    《jxl包:高效处理Excel数据的利器》 ...无论是进行数据分析、报表生成还是数据导入导出,jxl都是一个值得信赖的工具。在处理大量Excel数据时,利用jxl包的高效性能,可以大大提高开发效率和代码的可维护性。

    jxl pdf excel

    jxl提供了方法来插入JPEG、GIF、PNG等格式的图片到Excel工作表中。这在创建报告或者数据分析时非常有用,可以使数据更加直观易懂。 4. **转换与集成**: 将Excel数据转换成PDF格式,可能是为了满足打印、分享或...

    Excel导入通用类 源码

    本文将探讨一个基于Java的Excel导入通用类源码,它利用了反射技术、JXL库以及properties配置文件,旨在提供一种灵活且可扩展的数据导入导出解决方案。 首先,我们来看“反射应用”。在Java中,反射是一种强大的机制...

    通用的excel导出

    jxl库提供了相应的写入方法,如`Workbook.write()`,然后关闭工作簿以完成保存。 7. **异常处理**:在实际编程中,需要考虑错误处理,如文件不存在、内存溢出等问题,确保程序的健壮性。 8. **性能优化**:对于...

    Print Excel in java

    在实际代码实现中,我们还需要处理各种可能的异常,例如jxl.write.WriteException和jxl.write.biff.RowsExceededException,这些异常分别对应于写入过程中的通用错误和超出最大行数限制的错误。 通过以上的步骤和...

    excelUtils公共导出支持xls与xlsx

    在实际开发中,能够导入Excel文件是数据处理的重要部分,它可以用于数据分析、报表生成或数据迁移等任务。 在压缩包中,有两个文件名:"ExcelUtil.java"和"ExcelException.java"。"ExcelUtil.java"很可能包含了`...

    Excel导入导及动态验证

    在实际应用中,我们可以创建一个通用的`ExcelImportUtil`工具类,封装上述逻辑,提供一个方法接收文件路径、数据模型类以及回调函数,回调函数用于处理验证后的数据或异常。这样,只需提供不同的数据模型和回调,就...

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    excel-demo.zip

    总的来说,JXL适合简单快速的Excel处理任务,而Apache POI因其广泛的特性和对XLSX的支持,成为了更通用的选择。在实际开发中,根据项目需求和性能要求选择合适的库是至关重要的。通过下载并解压"excel-demo.zip",你...

    常用软件常用软件常用软件常用软件常用软件

    PDF是一种通用的文件格式,常用于报告、发票和合同,因为它可以保留原始文档的布局和格式。动态生成意味着可以根据用户需求或程序逻辑自动生成定制的PDF内容。 3. **相关资源文件**:“从 Java 应用程序动态生成 ...

    java导出Excel

    `Util`类通常是工具类,包含了一些通用方法;而`Bo`(Business Object)类则可能封装了业务逻辑。 8. **性能优化**: - 当处理大量数据时,要考虑内存管理和性能优化。例如,可以分批写入数据,或者使用 streaming...

    标签库架包-全

    其中,"standard"库提供了诸如条件语句、迭代、国际化、XML处理等通用功能。 2. **jstl-1.2.jar**: JavaServer Pages Standard Tag Library (JSTL) 是一套标准的JSP标签库,用于处理常见的任务,如迭代、条件判断...

    JAVA WEB典型模块与项目实战大全

    第19章 生成报表(struts 2.x+hibernate+jxl)  19.1 生成报表原理  19.2 下载jxl组件  19.3 生成报表前期准备  19.4 生成报表具体开发——持久层和服务层  19.5 生成报表具体开发——表示层  19.6 多学...

Global site tag (gtag.js) - Google Analytics