利用poi读写excel和word的示例

11年前

如果在项目中想把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。

来自:http://blog.csdn.net/liuhe688/article/details/4899825