java中poi_关于Java中POI读写office文档的使用

下载地址:

所需jar包:

这里我在各处看到不一样的答案,最终都没能在我的eclipse中成功使用,这种情况可能因人而异,所以我建议如无必要,尽量导入所有的jar包。

510889b8355b5fdb2d8e5942ecdbbdec.png

主要包释义:45dc390c1086f961b2ce93fb87bfb79a.png

读取doc://读取word文档

public static String readWord(String name) {

//声明读取流

FileInputStream in;

//声明文本

String text = null;

try {

//根据传入路径读取文档

in = new FileInputStream(name);

//获取文档对象

WordExtractor extractor = new WordExtractor(in);

//获取文档对象的文本

text = extractor.getText();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return text;

}

读取docx:public static String readDocx(String path) {

//声明文本

String text = null;

try {

//获取文件

InputStream is = new FileInputStream("doc/aaa.docx");

//获取文档对象

XWPFDocument doc = new XWPFDocument(is);

XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

//获取文本

text = extractor.getText();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return text;

}

读取xls和xlsx:

(因为要用,所以自己临时制作了一个小Demo)

这里我有个自定义表格:

712cf9028ca7b746beb860c6a061488c.png

相关的实体类和dao层都具备;/**

* 读取xls文件并且写入数据库

* @param path 要读取的xls文件路径

* @return 表格所有数据文本

*/

public static StringBuilder readXls(String path) {

//初始化单元格文本

String text = "";

//初始化表格文本

StringBuilder str = new StringBuilder();

// 初始化实例对象

User u = new User();

try {

//读取文件

FileInputStream is = new FileInputStream(path);

//创建xls表格对象

HSSFWorkbook excel = new HSSFWorkbook(is);

// 获取第一个sheet

HSSFSheet sheet0 = excel.getSheetAt(0);

//获取sheet对象的行数

int rowNum = sheet0.getPhysicalNumberOfRows();

for (int n = 1; n < rowNum; n++) {

//获取每行对象

HSSFRow row = sheet0.getRow(n);

for (int i = 0; i < 4; i++) {

//获取每一行的单元格对象

HSSFCell cell = row.getCell(i);

//设置单元格数据类型

cell.setCellType(CellType.STRING);

// 根据单元的的类型 读取相应的结果

text = cell.getStringCellValue();

//拼接表格数据

str.append(text+"\t");

//给对象的属性赋值

if (i == 0)

u.setUid(Integer.parseInt(text));

else if (i == 1)

u.setUname(text);

else if (i == 2)

u.setUsex(text);

else if (i == 3)

u.setUage(Integer.parseInt(text));

}

str.append("\n");

// 将此对象插入数据库表

new UserDao().add(u);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return str;

}

xlsx表格换汤不换药:/**

* 读取xlsx表格并且写入数据库

* @param path 表格文件路径

* @return 表格所有数据文本

*/

public static String readXlsx(String path) {

String text = "";

StringBuilder str = new StringBuilder();

User u = new User();

try {

FileInputStream pkg = new FileInputStream(path);

XSSFWorkbook excel = new XSSFWorkbook(pkg);

// 获取第一个sheet

XSSFSheet sheet0 = excel.getSheetAt(0);

int rowNum = sheet0.getPhysicalNumberOfRows();

for (int n = 1; n < rowNum; n++) {

XSSFRow row = sheet0.getRow(n);

for (int i = 0; i < 4; i++) {

XSSFCell cell = row.getCell(i);

cell.setCellType(CellType.STRING);

// 根据单元格读取相应的结果

text = cell.getStringCellValue();

str.append(text+"\t");

if (i == 0)

u.setUid(Integer.parseInt(text));

else if (i == 1)

u.setUname(text);

else if (i == 2)

u.setUsex(text);

else if (i == 3)

u.setUage(Integer.parseInt(text));

}

str.append("\n");

// 将此对象插入数据库表

new UserDao().add(u);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return text;

}

测试:// 调用方法

File f = new File("E:\\Documents\\temp\\poi.xls");

StringBuilder str = readXls(f.getAbsolutePath());

System.out.println(str);

数据库插入成功!

28b3fd2d202b418d31bf60b4b46feeaa.png

3789f82ef76971446adcc8817c667c59.png

生成excel表格:

利用原有的数据库数据进行操作/**

* 根据集合数据生成xls文件

* @param lis

* 集合

* @param path

* 要生成文件的路径

* @return 是否成功

*/

public static void createXls(List lis, String path) throws IOException {

// 创建工作簿

@SuppressWarnings("resource")

HSSFWorkbook work = new HSSFWorkbook();

// 新建一个名为用户的表

HSSFSheet sheet = work.createSheet("用户表");

// 创建表头

HSSFRow rowHead = sheet.createRow(0);

// 创建表头的列

HSSFCell cell1 = rowHead.createCell(0, CellType.STRING);

cell1.setCellValue("员工编号");

HSSFCell cell2 = rowHead.createCell(1, CellType.STRING);

cell2.setCellValue("员工姓名");

HSSFCell cell3 = rowHead.createCell(2, CellType.STRING);

cell3.setCellValue("员工性别");

HSSFCell cell4 = rowHead.createCell(3, CellType.STRING);

cell4.setCellValue("员工年龄");

// 获取集合长度

int size = lis.size();

for (int i = 0; i < size; i++) {

// 创建行对象

HSSFRow row = sheet.createRow(i + 1);

for (int j = 0; j < 4; j++) {

// 生成列对象

HSSFCell cell = row.createCell(j);

// 给单元格赋值

if (j == 0)

cell.setCellValue(lis.get(i).getUid());

else if (j == 1)

cell.setCellValue(lis.get(i).getUname());

else if (j == 2)

cell.setCellValue(lis.get(i).getUsex());

else if (j == 3)

cell.setCellValue(lis.get(i).getUage());

}

}

// 创建输出流

OutputStream out = new FileOutputStream(path + "\\temp.xls");

// 写入工作簿

work.write(out);

// 释放输出流资源

out.close();

System.out.println("文件已生成!");

}

测试://查询用户集合

List all = new UserDao().getAll();

try {

//生成文件

createXls(all, "E:\\Documents\\temp");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

结果:

541eb8db18c1e67076e2b093fd909a68.png

我本地的temp文件:

620160d9cb58d21a06ef68c7e76fd4ce.png

总结:

1.常用对象:* HSSFWorkbook/XSSFWorkbook:   Excel的文档对象

* HSSFSheet/XSSFSheet:    Excel的表单

* HSSFRow/XSSRow:        Excel的行

* HSSFCell/XSSCell:      Excel的单元格

* HSSFFont/XSSFont:             Excel字体

2.基础操作:HSSFWorkbook workbook = new HSSFWorkbook();//创建Excel文件(Workbook)

HSSFSheet sheet = workbook.createSheet();//创建工作表(Sheet)

sheet = workbook.createSheet("Test");//创建工作表(Sheet)

FileOutputStream out = new FileOutputStream(filePath);

workbook.write(out);//保存Excel文件

HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)

HSSFRow row = sheet.createRow(0);// 创建行,从0开始

HSSFCell cell = row.createCell(0);// 创建行的单元格,也是从0开始

cell.setCellValue("李志伟");// 设置单元格内容

row.createCell(1).setCellValue(false);// 设置单元格内容,重载

row.createCell(2).setCellValue(new Date());// 设置单元格内容,重载

row.createCell(3).setCellValue(12.345);// 设置单元格内容,重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值