下载地址:
所需jar包:
这里我在各处看到不一样的答案,最终都没能在我的eclipse中成功使用,这种情况可能因人而异,所以我建议如无必要,尽量导入所有的jar包。
主要包释义:
读取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)
这里我有个自定义表格:
相关的实体类和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);
数据库插入成功!
生成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();
}
结果:
我本地的temp文件:
总结:
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);// 设置单元格内容,重载