POI操作Excel(入门)

1。Excel简介
一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成。列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推。行则使用数字表示,例如;A3 表示第三行第一列,E5表示第五行第五列。
在这里插入图片描述
1.2POI工具包
JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI
jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel。而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel。
api地址:http://jxl.sourceforge.net/javadoc/index.html

POI全称 Poor Obfuscation Implementation,直译为“可怜的模糊实现”,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能。官网:http://poi.apache.org POI支持office的所有版本。

jar下载:
对于只操作2003 及以前版本的excel,只需要poi-3.10.1-20140818.jar
2007及以后版本进行操作:需要poi-3.10.1-20140818.jar ,poi-ooxml-3.10.1-20140818.jar,
poi-ooxml-schemas-3.10.1-20140818.jar,以及复制在ooxml-lib目录下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。

1.3POI Hello World
在POI包中有如下几个主要对象和excel的几个对象对应:

几个主要对象和excel的几个对象
HSSFWorkbook Excel
HSSFSheet Excel 工作表 sheet
HSSFRow Excel 行
HSSFCell Excel 单元格

HSSFRow Excel 行
HSSFCell Excel 单元格
利用以上几个对象,我们简单创建一个Excel工作表,往里面的C1单元格写入

package com.icbc.poi2.learn;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class PoiDemo1 {
	
	public static void main(String[] args) throws IOException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("工作表1");
		//第一行从0开始
		HSSFRow row0 = sheet.createRow(0);
		HSSFCell cell = row0.createCell(2);
		cell.setCellValue("hello...world");
		FileOutputStream fileOutputStream = new FileOutputStream("hello.xls");
		workbook.write(fileOutputStream);
		fileOutputStream.close();
	}
}

再利用上述几个对象将“Hello World”读取出来:

package com.icbc.poi2.learn;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class POIRead1 {

	public static void main(String[] args) throws IOException {
		FileInputStream inputStream = new FileInputStream("hello.xls");
		HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
		HSSFSheet sheet = workbook.getSheetAt(0);
		HSSFRow row0 = sheet.getRow(0);
		HSSFCell cell = row0.getCell(2);
		String value = cell.getStringCellValue();
		System.out.println(value);
	}
}

1.4POI与Excel
通过上门的例子我们知道如下信息:
1、Excel 的工作簿对应POI的HSSFWorkbook对象;
2、Excel 的工作表对应POI的HSSFSheet对象;
3、Excel 的行对应POI的HSSFRow对象;
4、Excel 的单元格对应POI的HSSFCell对象。

在这里插入图片描述
POI 也能对07以后的excel版本进行读写,读写方法和读写03版是一样的,只是对象名称变了;原来各对象的开头字母H变为X,操作方式不变。(操作,行,列 均从数值 0 开始。 )

在这里插入图片描述
从api文档中我们了解到:
HSSFWorkbook 和 XSSFWorkbook 都实现了Workbook接口;
HSSFSheet 和 XSSFSheet 实现了Sheet接口;
HSSFRow 和 XSSFRow 实现了Row接口;
HSSFCell 和 XSSFCell 实现了Cell接口;
因为这两类处理对象共同实现了对应的同一接口,届时将大大方便和简化了同时处理不同格式的excel文件的编码工作。如;在处理03和07版本的excel文件时利用统一的接口就可以做到分析两个版本的excel数据。

POI同时读入03和07版本的excel:
方法一:判断文件的名称后调用对应版本的读入方法。
方法二:根据WorkbookFactory来读入文件并统一处理。

1.5格式化Excel
在POI中可以利用格式化对象来格式化excel文档;也即设置excel内容的样式。POI中主要的格式化对象常用的有合并单元格、设置单元格字体、边框,背景颜色等。

合并单元格
在POI中有一个CellRangeAddress对象,中文直译是 单元格范围地址。
主要用于在单元格的合并上,这个对象的构造方法CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) 有4个参数 ,分别表示(起始行号,终止行号, 起始列号,终止列号), 设置这个对象中要合并的单元格范围后,工作表对象sheet调用方法addMergedRegion(CellRangeAddress region) ,将上述设置的CellRangeAddress对象作为参数传入即可合并单元格。
package com.icbc.poi2.learn;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;

public class CellRangeAddressDemo {

	public static void main(String[] args) throws IOException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		//设置范围。
		CellRangeAddress cellRangeAddress = new CellRangeAddress(1	,2, 1, 4);
		sheet.addMergedRegion(cellRangeAddress);
		//设置后内容
		HSSFRow row = sheet.createRow(1);
		HSSFCell cell = row.createCell(1);
		cell.setCellValue("设置后内容");
		FileOutputStream fileOutputStream = new FileOutputStream("CellRangeAddressDemo.xls");
		workbook.write(fileOutputStream);
		fileOutputStream.close();
		
		
		
	}
}

设置单元格样式
设置单元格样式,首先要初始化POI中的单元格样式对象HSSFCellStyle,然后在样式对象中设置不同的样式(内容位置、字体、背景、颜色、边框等)。单元格样式是由工作簿workbook创建的,一个工作簿可以创建多个样式。
①设置单元格内容位置;设置水平位置 setAlignment(short align) ,设置垂直位置setVerticalAlignment(short align)
在这里插入图片描述

②设置单元格字体;POI中的字体对象为HSSFFont,字体是由工作簿创建,可以用于多个单元格上。
在这里插入图片描述
③设置单元格背景色。
在这里插入图片描述
在这里插入图片描述

package com.icbc.poi2.learn;

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

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 org.apache.poi.hssf.util.HSSFColor;

public class HSSFCellStyleDemo {

	public static void main(String[] args) throws IOException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("SHEET1");
		HSSFRow row = sheet.createRow(3);
		HSSFCell cell = row.createCell(3);
		cell.setCellValue("单元格内容");
		//设置第4列宽
		sheet.setColumnWidth(3, 20*256);
		//单元格样式
		HSSFCellStyle style = workbook.createCellStyle();
		//单元格, 水平居中
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		//单元格,垂直居中
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		//创建字体
		HSSFFont font = workbook.createFont();
		font.setFontName(HSSFFont.FONT_ARIAL);
		font.setColor(HSSFColor.YELLOW.index);
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontHeight((short) 30);
		style.setFont(font);
		cell.setCellStyle(style);
		FileOutputStream fileOutputStream = new FileOutputStream("HSSFCellStyleDemo.xls");
		workbook.write(fileOutputStream);
		fileOutputStream.close();
		
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值