POI之——读写入门(poi的初级使用)
介绍:
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。
这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
结构:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
对象概念:
每一个Excel文件在poi中就是一个workbook对象,workbook可以包含多个sheet,sheet中有row对象。和cell对象,row代表一行,cell代表一个最小单元格。写Excel基本的操作流程:1、创建一个workbook对象(如:创建XSSFWorkbook对象);2、在workbook下创建sheet对象(如:创建 workbook.createSheet(‘名称’));3、在sheet中创建一row对象(例:spreadsheet.createRow(rowid));4、在row下创建cell对象(例:row.createCell(cellid))
例:(注意:判断获取的文件后缀名)
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Writesheet {
public static void main(String[] args) throws Exception
{
//创建空白的的 workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//创建空白的 sheet
XSSFSheet spreadsheet = workbook.createSheet(" Employee Info ");
//声明row对象
XSSFRow row;
//将数据放到map中
Map < String, Object[] > empinfo =
new TreeMap < String, Object[] >();
empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
empinfo.put( "2", new Object[] { "tp01", "Gopal", "Technical Manager" });
empinfo.put( "3", new Object[] { "tp02", "Manisha", "Proof Reader" });
empinfo.put( "4", new Object[] { "tp03", "Masthan", "Technical Writer" });
empinfo.put( "5", new Object[] { "tp04", "Satish", "Technical Writer" });
empinfo.put( "6", new Object[] { "tp05", "Krishna", "Technical Writer" });
//遍历map 将数据写到sheet中
Set < String > keyid = empinfo.keySet();
int rowid = 0;
for (String key : keyid)
{
row = spreadsheet.createRow(rowid++);//在sheet下创建第1行
Object [] objectArr = empinfo.get(key);
int cellid = 0;//声明 单元格ID
for (Object obj : objectArr)//遍历数据添加到该行中
{
Cell cell = row.createCell(cellid++);//通过ID创建 cell
cell.setCellValue((String)obj);//向cell里添加数据
}
}
//将编写的文件对象 写入到文件中
FileOutputStream out = new FileOutputStream(
new File("Writesheet.xlsx"));
workbook.write(out);
out.flush();
out.close();
System.out.println(
"Writesheet.xlsx written successfully" );
}
}
读取Excel表格流程与读取差不多,文档模型就是(workbook-->sheet-->row-->cell)
例如:(注意:判断获取的文件后缀名)
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Readsheet {
static XSSFRow row;
public static void main(String[] args) throws Exception
{
FileInputStream fis = new FileInputStream(new File("WriteSheet.xlsx"));//创建文件对象
XSSFWorkbook workbook = new XSSFWorkbook(fis);//通过文件对象创建Workbook
XSSFSheet spreadsheet = workbook.getSheetAt(0);//从workbook中获取第0个sheet
Iterator < Row > rowIterator = spreadsheet.iterator();//从sheet获取迭代器(行)
while (rowIterator.hasNext()){
row = (XSSFRow) rowIterator.next();//得到当前行
Iterator < Cell > cellIterator = row.cellIterator();//通过row获取cell迭代器
while ( cellIterator.hasNext()){
Cell cell = cellIterator.next();
switch (cell.getCellType()) {//不同cell中数据类型不同 需要调用不同的get方法
case Cell.CELL_TYPE_NUMERIC://cell_type_numeric
System.out.print(
cell.getNumericCellValue() + " " );
break;
case Cell.CELL_TYPE_STRING://cell_type_string
System.out.print(
cell.getStringCellValue() + " " );
break;
}
}
System.out.println();//当前行结束
}
fis.close();
}
}