【关键词】直接读取 MS Word 表格数据 【分类】JAVA 编码实现
【提供者】曾明奇 管理信息化 【问题描述】
我们在实际的运用中,用纯JAVA操纵MS Excel的较多,但是用JAVA直接对MS Word的操作较少,这里介绍下直接读取MS Word里的表格中的数据。
这里需要用到POI的几个包,到其官方网站下载下来:http://poi.apache.org/
一、直接读取MS Word里的文本内容 //读文档
@Test
public void testReadWord(){
try{ } }
FileInputStream in = new FileInputStream (\); WordExtractor extractor = new WordExtractor(in); String str = extractor.getText(); log.debug(str); e.printStackTrace(); e.printStackTrace();
}catch(FileNotFoundException e) { }catch (IOException e) {
一、直接读取MS Word里的表格数据
/**
* 直接读取Word文档中的表格中的内容 */ @Test
public void testTableCellLastParagraph() throws Exception {
File file = new File(dirname, \); FileInputStream in = new FileInputStream(file);
HWPFDocument doc = new HWPFDocument(in);
Range r = doc.getRange();
TableIterator it = new TableIterator(r);
//在表格外面插入内容
CharacterProperties cp = new CharacterProperties(); cp.setBold(true);
cp.setCharacterSpacing(10); cp.setChse(cp.SPRM_CHARSCALE); cp.setCapitalized(true);
int p = r.numParagraphs();
while(it.hasNext()){
Table t = (Table)it.next();
for(int i=0,j=t.numRows();i TableRow row = t.getRow(i); for(int m=0,n=row.numCells();m TableCell cell = row.getCell(m); String[] a = cell.text().split(\);//这个符号特别,类似 小方框□(粘贴到doc文档后变成了下划线) List } Paragraph para = r.getParagraph(p-1); log.debug(para.text()); para.insertBefore(\, cp); log.debug(para.text()); in.close(); } 二、 写文档 // 写文档 public boolean writeWordFile(String filePath, String content) { boolean w = false; try { } catch (IOException e) { } return w; } e.printStackTrace(); byte b[] = content.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(b); POIFSFileSystem fs = new POIFSFileSystem(); DirectoryEntry directory = fs.getRoot(); DocumentEntry de = directory.createDocument(\\, FileOutputStream ostream = new FileOutputStream(filePath); fs.writeFilesystem(ostream); bais.close(); ostream.close(); } String name = (String)list.get(0); log.debug(\第 \+i+\行第 \+m+\列==>>\+name); } bais); 【分析原因】由于POI对MS Word的操作还不尽完善等原因,在写MS Word时会有一点问题。 【避免此类问题的建议】可以直接打开其源码看一下他的实现。