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);// 設置單元格內容,重載