近来因为工作需求,编写一个操作excel的工具类,是基于poi的。和大家分享一下。
package com.shine.framework.core.office;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.shine.framework.core.util.FileUtil;
/**
* Java操作Excel封装
*
* @author Ken
* @blog http://blog.csdn.net/arjick/article/details/8182484
*
*/
public class ExcelUtils {
/**
* 建立excelFile
*
* @param excelPath
* @return
*/
public static boolean createExcelFile(String excelPath) {
HSSFWorkbook workbook = new HSSFWorkbook();
return outputHSSFWorkbook(workbook, excelPath);
}
/**
* 插入新的工作表
*
* @param excelPath
* @param sheetName
* @return
*/
public static boolean insertSheet(String excelPath, String sheetName) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook workbook = ExcelUtils.getHSSFWorkbook(excelPath);
HSSFSheet sheet = workbook.createSheet(sheetName);
return outputHSSFWorkbook(workbook, excelPath);
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 复制工作表
*
* @param excelPath
* @param sheetName
* @param sheetNum
* @return
*/
public static boolean copySheet(String excelPath, String sheetName,
int formSheetNum) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook workbook = ExcelUtils.getHSSFWorkbook(excelPath);
if (!ExcelUtils.checkSheet(workbook, sheetName)) {
workbook.cloneSheet(formSheetNum);
workbook.setSheetName(workbook.getNumberOfSheets() - 1,
sheetName);
return outputHSSFWorkbook(workbook, excelPath);
} else {
System.out.println(excelPath + ":存在同名工作表" + sheetName
+ ".....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 插入或者更新单元格
*
* @param excelPath
* @param sheetName
* @param rowNum
* @param cellNum
* @param value
* @return
*/
public static boolean insertOrUpdateCell(String excelPath,
String sheetName, int rowNum, int cellNum, String value) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
HSSFRow row = null;
if (sheet.getLastRowNum() < rowNum) {
row = sheet.createRow(rowNum);
} else {
row = sheet.getRow(rowNum);
}
HSSFCell cell = row.getCell(cellNum);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(value);
return outputHSSFWorkbook(wb, excelPath);
} else {
System.out.println(excelPath + "的" + sheetName
+ ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 插入或者更新单元格
*
* @param excelPath
* @param sheetIndex
* @param rowNum
* @param cellNum
* @param value
* @return
*/
public static boolean insertOrUpdateCell(String excelPath, int sheetIndex,
int rowNum, int cellNum, String value) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetIndex)) {
HSSFSheet sheet = wb.getSheetAt(sheetIndex);
HSSFRow row = null;
if (sheet.getLastRowNum() < rowNum) {
row = sheet.createRow(rowNum);
} else {
row = sheet.getRow(rowNum);
}
HSSFCell cell = row.getCell(cellNum);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(value);
return outputHSSFWorkbook(wb, excelPath);
} else {
System.out.println(excelPath + "的" + sheetIndex
+ ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
*
* @param excelPath
* @param sheetIndex
* @param rowNum
* @param cellNum
* @param value
* @param style
* @return
*/
public static boolean insertOrUpdateCell(String excelPath, int sheetIndex,
int rowNum, int cellNum, String value, HSSFCellStyle style) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetIndex)) {
HSSFSheet sheet = wb.getSheetAt(sheetIndex);
HSSFRow row = null;
if (sheet.getLastRowNum() < rowNum) {
row = sheet.createRow(rowNum);
} else {
row = sheet.getRow(rowNum);
}
HSSFCell cell = row.createCell(cellNum);
// cell.setCellType(HSSFCell.CELL_TYPE_STRING);
HSSFFont font = wb.createFont();
font.setFontHeight((short) 18);
HSSFCellStyle style1 = wb.createCellStyle();
style1.setFont(font);
// cell.setCellStyle(style1);
cell.setCellValue(value);
System.out.println(value);
return outputHSSFWorkbook(wb, excelPath);
} else {
System.out.println("insertOrUpdateCell:" + excelPath + "的"
+ sheetIndex + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 插入指定行数据
*
* @param excelPath
* @param sheetName
* @param rowNum
* @param values
* @return
*/
public static boolean insertOrUpadateRowDatas(String excelPath,
String sheetName, int rowNum, String... values) {
try {
for (int i = 0; i < values.length; i++) {
insertOrUpdateCell(excelPath, sheetName, rowNum, i, values[i]);
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 读入excel
*
* @param excelPath
* @return
* @throws Exception
*/
public static HSSFWorkbook getHSSFWorkbook(String excelPath)
throws Exception {
FileInputStream fs = null;
try {
fs = new FileInputStream(excelPath);
HSSFWorkbook wb = new HSSFWorkbook(fs);
return wb;
} catch (Exception e) {
throw e;
} finally {
try {
if (fs != null)
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 输入Excel
*
* @param wb
* @param excelPath
* @return
*/
private static boolean outputHSSFWorkbook(HSSFWorkbook wb, String excelPath) {
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(excelPath);
wb.write(fOut);
fOut.flush();
System.out.println(excelPath + ":文件生成...");
return true;
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} finally {
try {
if (fOut != null)
fOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
/**
* 检查是否存在工作表
*
* @param excelPath
* @param sheetName
* @return
*/
public static boolean checkSheet(HSSFWorkbook wb, String sheetName) {
try {
for (int numSheets = 0; numSheets < wb.getNumberOfSheets(); numSheets++) {
HSSFSheet sheet = wb.getSheetAt(numSheets);
if (sheetName.equals(sheet.getSheetName())) {
return true;
}
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 检查是否存在表数量
*
* @param wb
* @param sheetIndex
* @return
*/
public static boolean checkSheet(HSSFWorkbook wb, int sheetIndex) {
try {
if (wb.getNumberOfSheets() > sheetIndex)
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 清除指定excel的工作表所有内容
*
* @param excelPath
* @param sheet
* @return
*/
public static boolean cleanExcelFile1(String excelPath, String sheetName) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
for (int i = 0; i < sheet.getLastRowNum() + 1; i++) {
if (sheet.getRow(i) != null)
sheet.removeRow(sheet.getRow(i));
}
return outputHSSFWorkbook(wb, excelPath);
} else {
System.out.println("cleanExcelFile:" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 获取指定工作簿行数
*
* @param excelPath
* @param sheetName
* @return
*/
public static int getExcelSheetRowNum(String excelPath, String sheetName) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
return sheet.getLastRowNum() + 1;
} else {
System.out.println("getExcelSheetRowNum:" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return 0;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 删除行
*
* @excelPath
* @param sheetName
* @param row
* @return
*/
public static boolean deleteRow(String excelPath, String sheetName, int row) {
if (getExcelSheetRowNum(excelPath, sheetName) > row) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
if (sheet.getRow(row) != null)
sheet.removeRow(sheet.getRow(row));
return outputHSSFWorkbook(wb, excelPath);
} else {
System.out.println("deleteRow:" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("不存在指定行");
return true;
}
return false;
}
/**
* 获取所有数据
*
* @excelPath
* @param sheetName
* @return
*/
public static List<List> getAllData(String excelPath, String sheetName) {
try {
List<List> list = new ArrayList<List>();
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
for (int i = 0; i < sheet.getLastRowNum() + 1; i++) {
if (sheet.getRow(i) != null) {
List<String> rowList = new ArrayList<String>();
HSSFRow aRow = sheet.getRow(i);
for (int cellNumOfRow = 0; cellNumOfRow < aRow
.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值
if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
rowList.add(aCell.getStringCellValue());
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
rowList.add(String.valueOf(
aCell.getNumericCellValue())
.replace(".0", ""));
}
} else {
rowList.add("");
}
}
list.add(rowList);
}
}
return list;
} else {
System.out.println("getAllData:" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 读取部分数据
*
* @param excelPath
* @param sheetName
* @param start
* @param end
* @return
*/
public static List<List> getDatas(String excelPath, String sheetName,
int start, int end) {
try {
List<List> list = new ArrayList<List>();
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
for (int i = start - 1; i < end; i++) {
if (sheet.getRow(i) != null) {
List<String> rowList = new ArrayList<String>();
HSSFRow aRow = sheet.getRow(i);
for (int cellNumOfRow = 0; cellNumOfRow < aRow
.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值
if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
rowList.add(aCell.getStringCellValue());
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
rowList.add(String.valueOf(
aCell.getNumericCellValue())
.replace(".0", ""));
}
} else {
rowList.add("");
}
}
list.add(rowList);
}
}
return list;
} else {
System.out.println("getDatas:" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取指定行列数据
*
* @param excelPath
* @param sheetName
* @param row
* @param cellNum
* @return
*/
public static String getData(String excelPath, String sheetName, int row,
int cellNum) {
if (getExcelSheetRowNum(excelPath, sheetName) > row) {
try {
if (FileUtil.checkFile(excelPath)) {
HSSFWorkbook wb = getHSSFWorkbook(excelPath);
if (ExcelUtils.checkSheet(wb, sheetName)) {
HSSFSheet sheet = wb.getSheet(sheetName);
HSSFCell aCell = sheet.getRow(row).getCell(cellNum);
if (aCell != null)
return aCell.getStringCellValue();
} else {
System.out.println("getData" + excelPath + "的"
+ sheetName + ":工作表不存在.....");
}
} else {
System.out.println(excelPath + ":文件不存在.....");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// 创建新的excle
// ExcelUtils.createExcelFile("D:\\test.xls");
// 插入新的工作表
// ExcelUtils.insertSheet("D:\\test.xls", "333");
// 检查是否存在工作表
// HSSFWorkbook wb;
// try {
// wb = getHSSFWorkbook("D:\\test.xls");
// System.out.println(ExcelUtils.checkSheet(wb, "3334"));
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 插入一行数据
// ExcelUtils.insertOrUpadateRowDatas("D:\\test.xls", "333", 5, "123",
// "0000");
// 插入单元格数据
// ExcelUtils.insertOrUpdateCell("D:\\test.xls", "123", 5, 1, "0000");
// 删除指定工作表所有的行数据、
// ExcelUtils.cleanExcelFile("D:\\test.xls", "123");
// 删除指定行
// ExcelUtils.deleteRow("D:\\test.xls", "123", 0);
// 获取所有的数据
// List<List> list = ExcelUtils.getAllData("D:\\test.xls", "333");
// for (int i = 0; i < list.size(); i++) {
// List<String> rowList = list.get(i);
// for (int j = 0; j < rowList.size(); j++) {
// System.out.println(rowList.get(j));
// }
// }
// 获取部分的数据
// List<List> list = ExcelUtils.getDatas(
// "C:\\Users\\Ken\\Desktop\\测试名单.xls", "Sheet1", 5, 374);
// for (int i = 0; i < list.size(); i++) {
// List<String> rowList = list.get(i);
// for (int j = 0; j < rowList.size(); j++) {
// System.out.print(rowList.get(j) + " ");
// }
// System.out.println();
// }
// 获取指定行列数据
// System.out.println(ExcelUtils.getData("D:\\test.xls", "333", 5, 1));
// 复制指定工作表
ExcelUtils.copySheet("D:\\考场模版2.XLS", "333", 0);
}
}