https://archive.apache.org/dist/poi/release/bin/数据库
这里我在各处看到不同的答案,最终都没能在个人eclipse中成功使用,这种状况可能因人而异,因此我建议如无必要,尽可能导入全部的jar包。apache
//读取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; }
public static String readDocx(String path) { 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; }
(由于要用,因此本身临时制做了一个小Demo)
这里我有个自定义表格:
相关的实体类和dao层都具有;app
/** * 读取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表格换汤不换药:eclipse
/** * 读取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);
数据库插入成功!测试
利用原有的数据库数据进行操做字体
/** * 根据集合数据生成xls文件 * @param lis * 集合 * @param path * 要生成文件的路径 * @return 是否成功 */ public static void createXls(List<User> 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<User> all = new UserDao().getAll(); try { //生成文件 createXls(all, "E:\\Documents\\temp"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
我本地的temp文件:ui
* HSSFWorkbook/XSSFWorkbook: Excel的文档对象 * HSSFSheet/XSSFSheet: Excel的表单 * HSSFRow/XSSRow: Excel的行 * HSSFCell/XSSCell: Excel的单元格 * HSSFFont/XSSFont: Excel字体
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);// 设置单元格内容,重载