利用poi讀寫excel和word

f663x 9年前發布 | 5K 次閱讀 Java POI

如果在項目中想把excel數據導入到數據庫中或者將數據庫中的數據導出為excel,POI是個不錯的選擇。Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。


HSSF - 提供讀寫Microsoft Excel格式檔案的功能。

XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。

 

下面是兩個demo,分別讀寫excel和word:

 

讀取xls數據:


package poi.xls;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;

/**
 * 利用POI實現從excel中讀取內容
 */
public class XLSReader {

    public static String fileToRead = "c:/test.xls";

    public static void main(String args[]) throws Exception{
            // 創建對Excel工作簿文件的引用
            HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToRead));

            //HSSFSheet sheet = workbook.getSheet("第一頁");
            HSSFSheet sheet = workbook.getSheetAt(0);

            //讀取指定索引行的值
            HSSFRow row = sheet.getRow(1);
            //讀取指定索引格的值
            HSSFCell id = row.getCell((short) 0);
            HSSFCell name = row.getCell((short) 1);
            HSSFCell password = row.getCell((short) 2);

            //讀出數據
            System.out.println("id: " + id.getNumericCellValue());
            System.out.println("name:  " + name.getRichStringCellValue());
            System.out.println("password:  " + password.getRichStringCellValue());
    }
}


 

 

創建xls文件:


package poi.xls;

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

/**
 * 利用POI實現向excel中寫入內容
 */
public class XLSWriter {

    public static String fileToWrite = "c:/test.xls";

    public static void main(String[] args) throws Exception {

        // 創建新的Excel 工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        // 在Excel工作簿中建一工作表,其名為缺省值
        HSSFSheet sheet = workbook.createSheet("第一頁");
        //HSSFSheet sheet = workbook.createSheet();

        // 在指定的索引處創建一行
        HSSFRow row = sheet.createRow((short) 0);

        //在指定索引處創建單元格
        HSSFCell id = row.createCell((short) 0);
        // 定義單元格為字符串類型
        id.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        // 在單元格中輸入一些內容,HSSFRichTextString可以解決亂碼問題
        HSSFRichTextString idContent = new HSSFRichTextString("用戶id號");
        id.setCellValue(idContent);

        HSSFCell name = row.createCell((short) 1);
        name.setCellType(HSSFCell.CELL_TYPE_STRING);
        HSSFRichTextString nameContent = new HSSFRichTextString("用戶名");
        name.setCellValue(nameContent);

        HSSFCell password = row.createCell((short) 2);
        password.setCellType(HSSFCell.CELL_TYPE_STRING);
        HSSFRichTextString passwordContent = new HSSFRichTextString("用戶密碼");
        password.setCellValue(passwordContent);

        // 新建一輸出文件流
        FileOutputStream out = new FileOutputStream(fileToWrite);
        // 把相應的Excel 工作簿存盤
        workbook.write(out);
        out.flush();
        // 操作結束,關閉文件
        out.close();

        System.out.println("文件生成..." + fileToWrite);
    }
}


 

 

讀取word內容:


package poi.doc;

/**
 * 利用POI實現從word中讀取內容
 */
import java.io.FileInputStream;

import org.apache.poi.hwpf.extractor.WordExtractor;

public class DOCReader {

    public static String fileToRead = "c:/test.doc";

    public static void main(String[] args) throws Exception{
            // 創建輸入流讀取DOC文件
            FileInputStream in = new FileInputStream(fileToRead);

            // 創建WordExtractor
            WordExtractor extractor = new WordExtractor(in);

            // 對DOC文件進行提取
            String text = extractor.getText();

            System.out.println(text);
    }

}


 

 

創建word 文件:


package poi.doc;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * 利用POI實現向word寫入內容
 */
public class DOCWriter {

    public static String fileToWrite = "c:/test.doc";

    public static void main(String[] args) throws Exception{
        String content = "測試數據,將被寫入文檔";

        byte b[] = content.getBytes();

        ByteArrayInputStream bais = new ByteArrayInputStream(b);

        POIFSFileSystem fs = new POIFSFileSystem();

        FileOutputStream ostream = new FileOutputStream(fileToWrite);

        fs.writeFilesystem(ostream);

        bais.close();

        ostream.close();

    }
}


 

 上面是幾個小示例,要使用更復雜的應用,可以參照POI的API。

 本文由用戶 f663x 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!