关于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();
}
}
}