關於Java中POI讀寫office文檔的使用

下載地址:

https://archive.apache.org/dist/poi/release/bin/數據庫

所需jar包:

這裏我在各處看到不同的答案,最終都沒能在個人eclipse中成功使用,這種狀況可能因人而異,因此我建議如無必要,儘可能導入全部的jar包。
POI相關jar包.pngapache

主要包釋義:POI.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) {
    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)
這裏我有個自定義表格:
表格.png
相關的實體類和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);

數據庫插入成功!
爲.png
1.png測試

生成excel表格:

利用原有的數據庫數據進行操做字體

/**
     * 根據集合數據生成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();
        }

結果:

生成文件.png
我本地的temp文件:
的身上的.pngui

總結:

1.經常使用對象:
* HSSFWorkbook/XSSFWorkbook:   Excel的文檔對象
* HSSFSheet/XSSFSheet:         Excel的表單
* HSSFRow/XSSRow:              Excel的行
* HSSFCell/XSSCell:             Excel的單元格
* HSSFFont/XSSFont:             Excel字體
2.基礎操做:
  1. HSSFWorkbook workbook = new HSSFWorkbook();//建立Excel文件(Workbook)
  2.  HSSFSheet sheet = workbook.createSheet();//建立工做表(Sheet)
  3. sheet = workbook.createSheet("Test");//建立工做表(Sheet)
  4.  FileOutputStream out = new FileOutputStream(filePath);
  5. workbook.write(out);//保存Excel文件
  6. HSSFSheet sheet = workbook.createSheet("Test");// 建立工做表(Sheet)
  7. HSSFRow row = sheet.createRow(0);// 建立行,從0開始
  8. HSSFCell cell = row.createCell(0);// 建立行的單元格,也是從0開始
  9. cell.setCellValue("李志偉");// 設置單元格內容
  10. row.createCell(1).setCellValue(false);// 設置單元格內容,重載
  11. row.createCell(2).setCellValue(new Date());// 設置單元格內容,重載
  12. row.createCell(3).setCellValue(12.345);// 設置單元格內容,重載
相關文章
相關標籤/搜索