Java对word表格的处理
前段日子做一个发邮件的功能,邮件的内容需要从word中读取。后来发现因为word的不开源导致对word中复杂的处理是很麻烦的。下面整理了两种网上用得比较多的方法
1 poi读取word中的表格
Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API。在网上见到好多通过poi读取excel的文章,读写也很方便,和jxl有的一比。在这里,主要是poi对word中的表格数据读取。
具体见代码
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.hwpf.usermodel.Table; import org.apache.poi.hwpf.usermodel.TableCell; import org.apache.poi.hwpf.usermodel.TableIterator; import org.apache.poi.hwpf.usermodel.TableRow; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ExportDocImpl { public void testWord(){ try{ FileInputStream in = new FileInputStream("D:\\sinye.doc");//载入文档 POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange();//得到文档的读取范围 TableIterator it = new TableIterator(range); //迭代文档中的表格 while (it.hasNext()) { Table tb = (Table) it.next(); //迭代行,默认从0开始 for (int i = 0; i < tb.numRows(); i++) { TableRow tr = tb.getRow(i); //迭代列,默认从0开始 for (int j = 0; j < tr.numCells(); j++) { TableCell td = tr.getCell(j);//取得单元格 //取得单元格的内容 for(int k=0;k<td.numParagraphs();k++){ Paragraph para =td.getParagraph(k); String s = para.text(); System.out.println(s); } //end for } //end for } //end for } //end while }catch(Exception e){ e.printStackTrace(); } }//end method public void testWord1(){ try { //word 2003: 图片不会被读取 InputStream is = new FileInputStream(new File("D:\\sinye.doc")); WordExtractor ex = new WordExtractor(is); String text2003 = ex.getText(); System.out.println(text2003); //word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后 OPCPackage opcPackage = POIXMLDocument.openPackage("D:\\sinye.doc"); POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); String text2007 = extractor.getText(); System.out.println(text2007); } catch (Exception e) { e.printStackTrace(); } } }
当然POI对不算太复杂的数据处理是很方便,但涉及到了表格,图片就比较麻烦了。
2 jacob对表格的处理
但是因为微软的恶心,好像目前不支持在Linux上。所以这里不多说了。。
相关推荐
chenjia00 2020-07-04
zhangxiaocc 2020-06-10
香帅 2020-06-07
chenjia00 2020-06-03
chenjia00 2020-05-29
大白配小猪 2020-05-27
duckes 2020-05-17
ErixHao 2020-05-04
登峰小蚁 2020-04-17
chenjia00 2020-04-17
stoneechogx 2020-03-04
URML 2020-01-11
dxmkkk 2019-12-09
小西0 2019-12-06
itmale 2019-12-04
在旅途 2019-11-09
newfarhui 2019-11-04