Java POI Excel封装例子

 近来因为工作需求,编写一个操作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);

	}
}


你可能感兴趣的:(Java POI Excel封装例子)