`
yunzhu
  • 浏览: 1147268 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
B2b19957-cda7-3a9e-83a0-418743feb0ca
监控应用服务器
浏览量:110237
2e8be8be-e51f-346c-bcdd-12623c9aa820
Web前端开发
浏览量:119908
Bfa5df64-a623-34b9-85b8-ef3ce2aed758
经典异常的解决
浏览量:204837
社区版块
存档分类
最新评论

操作Excel工具类(基于jxl.jar)

阅读更多

关于JXL就不多做介绍了,这是自己封装的工具类。

 

功能简介:

1、向Excel文档插入数据,可以是多行可以是多列,保留原单元格格式不变

2、向Excel文档插入一个新行,并且使用与上一行完全相同的格式

3、拷贝一个sheet,与原sheet内容完全一致

4、等等

 

需要的第三方JAR包:jxl.jar,见附件

 

工具类的完整代码如下:

import java.io.File;
import java.io.IOException;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.CellFormat;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * Excel工具类
 * 
 * <pre>
 * 基于jxl.jar类库
 * </pre>
 * 
 * @author 陈峰
 */
public class JXLExcelMakerUtil {

	private File excelFile;

	private Workbook workBook;

	private WritableWorkbook wWorkBook;

	public JXLExcelMakerUtil(File file) throws BiffException, IOException {
		this.excelFile = file;
		WorkbookSettings setting = new WorkbookSettings();
		setting.setSuppressWarnings(true);
		this.workBook = Workbook.getWorkbook(excelFile, setting);
		this.wWorkBook = Workbook.createWorkbook(excelFile, this.workBook);
	}

	/**
	 * 写入一组值
	 * 
	 * @param sheetNum
	 *            写入的sheet的编号
	 * @param fillRow
	 *            是写入行还是写入列
	 * @param startRowNum
	 *            开始行号
	 * @param startColumnNum
	 *            开始列号
	 * @param contents
	 *            写入的内容数组
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeArrayToExcel(int sheetNum, boolean fillRow,
			int startRowNum, int startColumnNum, Object[] contents)
			throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		writeArrayToExcel(sheet, fillRow, startRowNum, startColumnNum, contents);
	}

	/**
	 * 写入一组值
	 * 
	 * @param sheetName
	 *            写入的sheet的名称
	 * @param fillRow
	 *            是写入行还是写入列
	 * @param startRowNum
	 *            开始行号
	 * @param startColumnNum
	 *            开始列号
	 * @param contents
	 *            写入的内容数组
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeArrayToExcel(String sheetName, boolean fillRow,
			int startRowNum, int startColumnNum, Object[] contents)
			throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetName);
		writeArrayToExcel(sheet, fillRow, startRowNum, startColumnNum, contents);
	}

	/**
	 * 写入一组值
	 * 
	 * @param sheetNum
	 *            写入的sheet的编号
	 * @param fillRow
	 *            是写入行还是写入列
	 * @param startColumnRowNum
	 *            开始单元格的位置
	 * @param contents
	 *            写入的内容数组
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeArrayToExcel(int sheetNum, boolean fillRow,
			String startColumnRowNum, Object[] contents) throws BiffException,
			IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		WritableCell startCell = sheet.getWritableCell(startColumnRowNum);
		int startRowNum = startCell.getRow();
		int startColumnNum = startCell.getColumn();
		this.writeArrayToExcel(sheetNum, fillRow, startRowNum, startColumnNum,
				contents);
	}

	private void writeArrayToExcel(WritableSheet sheet, boolean fillRow,
			int startRowNum, int startColumnNum, Object[] contents)
			throws WriteException, RowsExceededException {
		for (int i = 0, length = contents.length; i < length; i++) {
			int rowNum;
			int columnNum;
			// 以行为单位写入
			if (fillRow) {
				rowNum = startRowNum;
				columnNum = startColumnNum + i;
			}
			//  以列为单位写入
			else {
				rowNum = startRowNum + i;
				columnNum = startColumnNum;
			}
			this.writeToCell(sheet, rowNum, columnNum, contents[i]);
		}
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetNum
	 *            sheet的编号
	 * @param rowNum
	 *            行号
	 * @param columnNum
	 *            列号
	 * @param value
	 *            写入的值
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(int sheetNum, int rowNum, int columnNum,
			Object value) throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		this.writeToCell(sheet, rowNum, columnNum, value);
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetNum
	 *            sheet的编号
	 * @param columnRowNum
	 *            单元格的位置
	 * @param value
	 *            写入的值
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(int sheetNum, String columnRowNum, Object value)
			throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		this.writeToCell(sheet, columnRowNum, value);
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetName
	 *            sheet的名称
	 * @param columnRowNum
	 *            单元格的位置
	 * @param value
	 *            写入的值
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(String sheetName, String columnRowNum, Object value)
			throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetName);
		this.writeToCell(sheet, columnRowNum, value);
	}

	private void writeToCell(WritableSheet sheet, int rowNum, int columnNum,
			Object value) throws WriteException, RowsExceededException {
		WritableCell cell = sheet.getWritableCell(columnNum, rowNum);
		writeToCell(sheet, cell, value);
	}

	private void writeToCell(WritableSheet sheet, String columnRowNum,
			Object value) throws WriteException, RowsExceededException {
		WritableCell cell = sheet.getWritableCell(columnRowNum);
		writeToCell(sheet, cell, value);
	}

	private void writeToCell(WritableSheet sheet, WritableCell cell,
			Object value) throws WriteException, RowsExceededException {
		CellFormat cellFormat = cell.getCellFormat();
		Label label;
		if (cellFormat == null) {
			label = new Label(cell.getColumn(), cell.getRow(),
					convertString(value));
		} else {
			label = new Label(cell.getColumn(), cell.getRow(),
					convertString(value), cellFormat);
		}
		sheet.addCell(label);
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetNum
	 * @param rowNum
	 * @param columnNum
	 * @param value
	 * @param lineWrap
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(int sheetNum, int rowNum, int columnNum,
			Object value, boolean lineWrap) throws BiffException, IOException,
			WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		this.writeToCell(sheet, rowNum, columnNum, value, lineWrap);
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetNum
	 * @param columnRowNum
	 * @param value
	 * @param lineWrap
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(int sheetNum, String columnRowNum, Object value,
			boolean lineWrap) throws BiffException, IOException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		this.writeToCell(sheet, columnRowNum, value, lineWrap);
	}

	/**
	 * 向一个单元格写入值
	 * 
	 * @param sheetName
	 *            sheet的名称
	 * @param columnRowNum
	 *            写入单元格的位置
	 * @param value
	 *            写入单元格的值
	 * @param lineWrap
	 *            是否换行
	 * @throws BiffException
	 * @throws IOException
	 * @throws WriteException
	 */
	public void writeToExcel(String sheetName, String columnRowNum,
			Object value, boolean lineWrap) throws BiffException, IOException,
			WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetName);
		this.writeToCell(sheet, columnRowNum, value, lineWrap);
	}

	private void writeToCell(WritableSheet sheet, int rowNum, int columnNum,
			Object value, boolean lineWrap) throws WriteException,
			RowsExceededException {
		WritableCell cell = sheet.getWritableCell(columnNum, rowNum);
		writeToCell(sheet, cell, value, lineWrap);
	}

	private void writeToCell(WritableSheet sheet, String columnRowNum,
			Object value, boolean lineWrap) throws WriteException,
			RowsExceededException {
		WritableCell cell = sheet.getWritableCell(columnRowNum);
		writeToCell(sheet, cell, value, lineWrap);
	}

	private void writeToCell(WritableSheet sheet, WritableCell cell,
			Object value, boolean lineWrap) throws WriteException,
			RowsExceededException {
		CellFormat cellFormat = cell.getCellFormat();
		Label label;
		if (cellFormat == null) {
			label = new Label(cell.getColumn(), cell.getRow(),
					convertString(value));
		} else {
			WritableCellFormat wCellFormat = new WritableCellFormat(cellFormat);
			wCellFormat.setWrap(lineWrap);
			label = new Label(cell.getColumn(), cell.getRow(),
					convertString(value), wCellFormat);
		}
		sheet.addCell(label);
	}

	/**
	 * 插入一行
	 * 
	 * @param sheetNum
	 *            插入行的sheet的编号
	 * @param rowNum
	 *            插入行的位置
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	public void insertRow(int sheetNum, int rowNum)
			throws RowsExceededException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		sheet.insertRow(rowNum);
	}

	/**
	 * 插入一行并参照与上一行相同的格式
	 * 
	 * @param sheetNum
	 *            插入行的sheet的编号
	 * @param rowNum
	 *            插入行的位置
	 * @param columnSize
	 *            需要参照上一行格式的单元格数量
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	public void insertRowWithFormat(int sheetNum, int rowNum, int columnSize)
			throws RowsExceededException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		insertRowWithFormat(sheet, rowNum, columnSize);
	}

	/**
	 * 插入一行并参照与上一行相同的格式
	 * 
	 * @param sheetName
	 *            插入行的sheet的名称
	 * @param rowNum
	 *            插入行的位置
	 * @param columnSize
	 *            需要参照上一行格式的单元格数量
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	public void insertRowWithFormat(String sheetName, int rowNum, int columnSize)
			throws RowsExceededException, WriteException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetName);
		insertRowWithFormat(sheet, rowNum, columnSize);
	}

	/**
	 * 插入一行并参照与上一行相同的格式
	 * 
	 * @param sheet
	 *            插入行的sheet
	 * @param rowNum
	 *            插入行的位置
	 * @param columnSize
	 *            需要参照上一行格式的单元格数量
	 * @throws RowsExceededException
	 * @throws WriteException
	 */
	private void insertRowWithFormat(WritableSheet sheet, int rowNum,
			int columnSize) throws RowsExceededException, WriteException {
		sheet.insertRow(rowNum);
		sheet.setRowView(rowNum, sheet.getRowView(rowNum - 1));
		for (int i = 0; i < columnSize; i++) {
			CellFormat cellFormat = sheet.getCell(i, rowNum - 1)
					.getCellFormat();
			if (cellFormat != null) {
				Label label = new Label(i, rowNum, "", cellFormat);
				sheet.addCell(label);
			}
		}
	}

	/**
	 * 重命名一个sheet
	 * 
	 * @param sheetNum
	 *            sheet的编号
	 * @param newName
	 *            新的名称
	 * @throws IOException
	 */
	public void renameSheet(int sheetNum, String newName) throws IOException {
		WritableSheet sheet = this.wWorkBook.getSheet(sheetNum);
		sheet.setName(newName);
	}

	/**
	 * 重命名一个sheet
	 * 
	 * @param oldName
	 *            旧的名称
	 * @param newName
	 *            新的名称
	 * @throws IOException
	 */
	public void renameSheet(String oldName, String newName) throws IOException {
		WritableSheet sheet = this.wWorkBook.getSheet(oldName);
		sheet.setName(newName);
	}

	/**
	 * 拷贝一个sheet
	 * 
	 * @param oldSheetNum
	 *            旧的sheet的编号
	 * @param newSheetNum
	 *            新的sheet的编号
	 * @param newSheetName
	 *            新的sheet的名称
	 */
	public void copySheet(int oldSheetNum, int newSheetNum, String newSheetName) {
		this.wWorkBook.copySheet(oldSheetNum, newSheetName, newSheetNum);
	}

	/**
	 * 写入Excel文件并关闭
	 */
	public void writeAndClose() {
		if (this.wWorkBook != null) {
			try {
				this.wWorkBook.write();
			} catch (Exception e) {
			}
		}
		if (this.wWorkBook != null) {
			try {
				this.wWorkBook.close();
			} catch (Exception e) {
			}
		}
		if (this.workBook != null) {
			try {
				this.workBook.close();
			} catch (Exception e) {
			}
		}
	}

	private static String convertString(Object value) {
		if (value == null) {
			return "";
		} else {
			return value.toString();
		}
	}

}
 

 

 

 

 

 

  • jxl.jar (708.2 KB)
  • 下载次数: 176
1
0
分享到:
评论
1 楼 wangtianxin 2016-10-20  
setRowView() 这个方法用错了

相关推荐

    jxl.jar包最新jar包亲测可用

    《使用jxl.jar包在Java中操作Excel文件的详尽指南》 在Java开发中,与Excel文件交互是一项常见的任务,比如数据导入、导出、分析等。jxl.jar库提供了一个强大的解决方案,使得开发者无需依赖Windows环境即可处理...

    Java操作Excel(jxl.jar)

    总结来说,jxl.jar库是Java操作Excel的一个实用工具,它提供了丰富的API来读取、修改和创建Excel文件。通过熟练掌握这个库,开发者可以方便地在Java应用程序中集成Excel相关的功能,进行数据处理和报告生成等工作。...

    excel 导出用的jxl.jar

    《使用jxl.jar进行Excel数据导出详解》 在IT领域,尤其是在数据分析、报表生成以及数据交换等场景中,Excel文件常常被用作数据存储和展示的工具。Java程序员经常需要处理与Excel文件的交互,比如导出数据到Excel。...

    jxl.jar完整包

    《使用Java的jxl库创建...在实际开发中,结合jxl.jar和其他辅助工具,我们可以构建出功能丰富的Excel处理系统,满足各种业务需求。不过,随着技术的发展,开发者也需要关注更新的解决方案,以适应不断变化的技术环境。

    jxl.jar原版、修改后的jxl.jar解决web dynpro中乱码问题

    【标题】"jxl.jar原版、修改后的jxl.jar解决web dynpro中乱码问题"涉及的关键技术点主要集中在两个方面:一是Java的jar包处理,二是Web Dynpro组件与Excel数据交互时的字符编码问题。下面将对这两个主题进行深入的...

    jxl操作excel实例,jxl jar包下载

    本文将详细介绍如何使用`jxl`库进行Excel操作,并提供一个简单的实例。 首先,`jxl.jar`是`jxl`库的主要组件,你需要将其添加到你的项目类路径中。这可以通过将`jxl.jar`放在`lib`目录下或在IDE(如Eclipse、...

    jxl.jar excel操作包

    总的来说,jxl.jar作为一个轻量级的Excel操作工具,对于处理.xls文件的应用场景,无疑是一个理想的选择。然而,面对.xlsx格式的挑战,开发者需要权衡性能和兼容性的需求,选择更适合的库进行开发。在不断发展的IT...

    jxl.jar_java操作excel表格的jar包

    总结,`jxl.jar`是Java中处理Excel文件的一个基础工具,适用于小型项目和简单的Excel操作。对于复杂的需求,开发者可能需要寻找更强大、更现代化的替代方案。但无论如何,理解`jxl.jar`的基本用法仍然是Java开发者的...

    jxl.jar源码

    jxl.jar库为Java开发者提供了一个强大的工具,它允许我们方便地读取、写入和修改Excel文件。本文将对jxl.jar的源码进行深入探讨,揭示其内部工作机制,帮助读者更好地理解和利用这个开源库。 首先,jxl.jar的核心...

    jxl.jar,excel数据工具类导出jar

    总的来说,jxl.jar是Java开发环境下处理Excel数据的得力工具,无论是在数据分析、报表生成还是数据导入导出场景下,都能发挥重要作用。通过熟练掌握jxl.jar的使用,开发者可以大大提高工作效率,减少手动操作的繁琐...

    jxl.jar没费下载

    《深入理解Java库jxl.jar:操作Excel的利器》 在Java编程中,处理Excel文件是一项常见的任务,尤其是在数据导入导出、报表生成等领域。jxl.jar作为一个纯Java实现的库,为开发者提供了便捷的方式来读取和写入Excel...

    jxl.jar,解析excel所用到的jar包

    jxl.jar的核心类包括Sheet和Workbook,它们分别对应Excel中的工作表和工作簿,是操作Excel文件的基础。 1. **Workbook类**:这是jxl库的核心类,代表一个Excel工作簿。你可以通过Workbook的静态方法createWorkbook...

    jxl.jar及其API,java操作excel

    总之,jxl.jar是Java开发人员处理Excel文件的重要工具,通过其提供的API,可以轻松地实现Excel数据的读写和格式化操作。jexcelapi_2_4_5版本的文档将帮助你更深入地了解和利用这些功能,提高工作效率。无论你是要...

    读取Excel需要的jxl.jar文件

    总之,jxl.jar是一个实用的工具,可以方便地在Android应用中读取Excel数据。然而,由于Android环境的特殊性,可能需要进行额外的兼容性和性能调整。在实际开发中,确保测试在各种设备和Excel文件类型上的行为,以...

    jxl.jar包(java导入导出Excel文件)

    **Java Excel工具包——jxl.jar** 在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel...

    使用jxl.jar 对Excel 进行读写

    总之,`jxl.jar`是一个非常实用的工具,它使Java开发者能够方便地处理Excel文件,无论是简单的数据导入导出还是复杂的报表生成,都能轻松应对。记得在使用时处理好异常,确保文件读写的安全性。

    jxl.jar(JAVA对EXCEL表格的操作)

    **标题详解:**"jxl.jar (JAVA对EXCEL表格的操作)" `jxl.jar` 是一个Java类库,主要用于处理Microsoft Excel文件。这个库使得Java开发者能够在程序中读取、写入、编辑以及创建Excel电子表格。它提供了丰富的API接口...

    导入/导出excel jxl.jar

    JXL.jar文件就是这个库的实现,它包含了所有必要的类和方法,使得开发者可以方便地与Excel工作簿进行交互,包括处理包含图片等二进制数据的工作表。 JExcelApi支持多种功能,如: 1. **读取Excel文件**:你可以...

    java解析excel包(jxl.jar)

    在Java应用程序中,如果需要处理Excel数据,如数据分析、报表生成或导入导出功能,jxl.jar包就是一个非常实用的工具。这个库提供了丰富的API,允许开发者对Excel工作簿、工作表、单元格等进行操作。 一、jxl.jar包...

Global site tag (gtag.js) - Google Analytics