java---poi

刚过年来,公司事情不多,就想着学习一点东西,所以就看上了利用java操作Excel,具体网上搜了一下,一共有两种方法,分别是jxl和poi。两个性能貌似差不多,我就找poi学习了一下。

poi操作Excel的方法还是很多的,经过我的学习,发现其实可以分为几部分,workbook---sheet---row---cel,这几层级关系

我具体写了两个工具类,还写的不够,估计也会有一定的问题。先放上来,有大神看到错误请指点。

package cn.com.liuhl.sendEmailByExcel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Sheet;

/**
 * 
 * <p>
 * 操作工作簿
 * </p>
 *
 * @author liuhl
 * @version
 */
public class MyWorkBookUtil {

	private static File file;

	private static HSSFWorkbook workbook;

	static {
		try {
			file = new File("C:\\Users\\liuhl\\Desktop\\ceshi.xls");
			POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
			workbook = new HSSFWorkbook(fs);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取工作簿对象
	 * 
	 * @return
	 */
	public static HSSFWorkbook getWorkBook() {
		return workbook;
	}

	/**
	 * 
	 * 获取工作表
	 * 
	 * @param sheetName
	 * @return
	 */
	public static Sheet getSheet(String sheetName) {
		HSSFSheet sheet = workbook.getSheet(sheetName);
		return sheet;
	}

	/**
	 * 创建一个sheet
	 * 
	 * @param sheetname
	 */
	public static void creatSheet(String sheetname) {
		// 如果输入sheet名为空,就默认创建一个sheet
		if ("".equals(sheetname)) {
			workbook.createSheet();
		} else {
			workbook.createSheet(sheetname);
		}
		try {
			fileWrite();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据索引删除sheet
	 * 
	 * @param index
	 *            索引,从0开始
	 */
	public static void removeSheet(int index) {
		workbook.removeSheetAt(index);
		try {
			fileWrite();
			close(workbook);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据名字删除sheet
	 * 
	 * @param name
	 *            工作表名称
	 */
	public static void removeSheet(String name) {
		int sheetIndex = workbook.getSheetIndex(name);
		removeSheet(sheetIndex);
	}

	/**
	 * 写/删除后的Excel文件
	 * 
	 * @param targetFile
	 *            目标文件
	 * @param wb
	 *            Excel对象
	 * @throws Exception
	 */
	public static void fileWrite() throws Exception {
		FileOutputStream fileOut = new FileOutputStream(file);
		workbook.write(fileOut);
		fileOut.flush();
		fileOut.close();
	}

	/**
	 * 关闭资源
	 * 
	 * @param workBook
	 */
	public static void close(HSSFWorkbook workBook) {
		try {
			if (workBook != null) {
				workBook.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws FileNotFoundException, IOException {
		// OperateExcelUtil.creatSheet("sheet4");
		MyWorkBookUtil.removeSheet("sheet4");
	}
}
package cn.com.liuhl.sendEmailByExcel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

/**
 * 
 * <p>
 * sheet操作
 * </p>
 *
 * @author liuhl
 * @version
 */
public class MySheetUtil {

	private static File file;

	private static HSSFWorkbook workbook;

	static {
		try {
			file = new File("C:\\Users\\liuhl\\Desktop\\ceshi.xls");
			POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
			workbook = new HSSFWorkbook(fs);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * 获取工作表
	 * 
	 * @param sheetName
	 * @return
	 */
	public static HSSFSheet getSheet(String sheetName) {
		HSSFSheet sheet = workbook.getSheet(sheetName);
		return sheet;
	}

	/**
	 * 获得sheet工作表中的所有数据,并放入一个二维数组中 需要这个sheet表中全部都是string
	 * 
	 * @param sheet
	 * @return
	 */
	public static Object[][] printAllCell(Sheet sheet) {
		// 获得行数
		int rows = sheet.getLastRowNum() + 1;
		// 获得列数,先获得一行,在得到该行列数
		Row tmp = sheet.getRow(0);
		if (tmp == null) {
			return null;
		}
		// 建造一个二维数组,用来存储单元格中的元素
		Object[][] cells = new Object[rows][];
		// 读取数据
		for (int row = 0; row < rows; row++) {
			Row r = sheet.getRow(row);
			// 获得开始单元格和结束单元格的索引
			short maxColIx = r.getLastCellNum();
			cells[row] = new Object[maxColIx];
			// 进入循环
			for (short col = 0; col < maxColIx; col++) {
				Cell currentCell = r.getCell(col);
				if (currentCell == null) {
					cells[row][col] = "";
					continue;
				}
				cells[row][col] = currentCell.getStringCellValue();
			}
		}
		return cells;
	}

	/**
	 * 修改/创建单元格的值
	 * 
	 * @param value
	 */
	public static void setCellValueString(Sheet sheet, int row, int col, String value) {
		// 获取行,如果行不存在,就创建
		Row currrow = sheet.getRow(row);
		if (currrow == null) {
			currrow = createRow(sheet, row);
		}
		// 获取单元格,如果单元格不存在,就创建并赋值
		Cell cell = currrow.getCell(col);
		if (cell == null) {
			currrow.createCell(col).setCellValue(value);
		}
		try {
			FileOutputStream fileOut = new FileOutputStream(file);
			workbook.write(fileOut);
			fileOut.flush();
			fileOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 插入一行,
	 * 
	 * @param sheet
	 * @param rows
	 *            从哪一行插入
	 */
	public static Row createRow(Sheet sheet, int rows) {
		// 获得行数
		// 获得列数,先获得一行,在得到该行列数
		if (sheet.getRow(rows) != null) {
			int lastRows = sheet.getLastRowNum();
			sheet.shiftRows(rows, lastRows, 1);
		}
		Row row = sheet.createRow(rows);
		fileWrite();
		return row;
	}

	/**
	 * 写/删除后的Excel文件
	 * 
	 * @param targetFile
	 *            目标文件
	 * @param wb
	 *            Excel对象
	 * @throws Exception
	 */
	public static void fileWrite() {
		FileOutputStream fileOut;
		try {
			fileOut = new FileOutputStream(file);
			workbook.write(fileOut);
			fileOut.flush();
			fileOut.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		createRow(getSheet("sheet211"), 24);
		// setCellValueString(getSheet("sheet211"), 29, 3, "我爱你");
		// Object[][] objects = printAllCell(getSheet("sheet211"));
		// for (int row = 0; row < objects.length; row++) {
		// Object[] r = objects[row];
		// for (int col = 0; col < r.length; col++) {
		// System.out.print(r[col].toString() + " ");
		// }
		// System.out.println();
		// }
	}
}

发现学习一个新的api的最好办法,就是将它写成一个工具类,可以不包含所有的方法和操作,但是一些基础和常用的可以封装一下,这样对api就会更加熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值