poi讀寫excel和word – JAVA編程語言程序開發技術文章

如果在項目中想把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數據:
view plaincopy to clipboardprint?
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());  
    }  

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文件:
view plaincopy to clipboardprint?
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);  
    }  

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內容:
view plaincopy to clipboardprint?
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);  
    }  
 

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 文件:
view plaincopy to clipboardprint?
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();  
 
    }  

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。

作者“tnjun123456”
 

發佈留言