zoukankan      html  css  js  c++  java
  • 《《《Java使用POI读取Word中的特殊表格》》》

    转载地址https://www.cnblogs.com/fanwenhao/p/11096596.html

    代码

     1 package live.autu.word;
     2  
     3 import java.io.FileInputStream;
     4  
     5 import org.apache.poi.hwpf.HWPFDocument;
     6 import org.apache.poi.hwpf.usermodel.Paragraph;
     7 import org.apache.poi.hwpf.usermodel.Range;
     8 import org.apache.poi.hwpf.usermodel.Table;
     9 import org.apache.poi.hwpf.usermodel.TableCell;
    10 import org.apache.poi.hwpf.usermodel.TableIterator;
    11 import org.apache.poi.hwpf.usermodel.TableRow;
    12 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    13  
    14 /**
    15  * Hello world!
    16  *
    17  */
    18  
    19 public class App {
    20     public static void main(String[] args) {
    21         //doc文档路径
    22         String filePath = "C:\Users\autu\Desktop\test.doc";
    23         //test.print(filePath,"第一个表");
    24          
    25         System.out.println(App.read(filePath,"第一个表"));;
    26     }
    27  
    28     /**
    29      * 读取文档中表格
    30      * @param filePath doc路径
    31      * @param set 第几个表格
    32      */
    33     public static String read(String filePath,String tableName) {
    34  
    35         StringBuilder sb=new StringBuilder();
    36          
    37          
    38         try (FileInputStream in = new FileInputStream(filePath); // 载入文档
    39                 POIFSFileSystem pfs = new POIFSFileSystem(in);
    40                 HWPFDocument hwpf = new HWPFDocument(pfs);) {
    41           
    42             Range range = hwpf.getRange();// 得到文档的读取范围
    43             TableIterator it = new TableIterator(range);
    44             // 迭代文档中的表格
    45       
    46             while (it.hasNext()) {
    47                 Table tb = (Table) it.next();
    48               
    49                 // 迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
    50                 outer:for (int i = 0; i < tb.numRows(); i++) {
    51                     TableRow tr = tb.getRow(i);
    52                     // 迭代列,默认从0开始
    53                     for (int j = 0; j < tr.numCells(); j++) {
    54                         TableCell td = tr.getCell(j);// 取得单元格
    55                         // 取得单元格的内容
    56                         for (int k = 0; k < td.numParagraphs(); k++) {
    57                             Paragraph para = td.getParagraph(k);
    58                             String s = para.text();
    59                             // 去除后面的特殊符号
    60                             if (null != s && !"".equals(s)) {
    61                                 s = s.substring(0, s.length() - 1);
    62                             }
    63                             s=s.trim();
    64                             if(tableName.trim().equals(s)||i!=0) {
    65                                 sb.append(s + "	");
    66                             } else {
    67                                 break outer;
    68                             }   
    69                         }
    70                     }
    71                     sb.append( "
    ");
    72                 }
    73             }
    74  
    75         } catch (Exception e) {
    76             e.printStackTrace();
    77         }
    78          
    79         return sb.toString();
    80     }
    81  
    82 }

    依赖

     1 <dependency>
     2     <groupId>org.apache.poi</groupId>
     3     <artifactId>poi</artifactId>
     4     <version>4.0.1</version>
     5 </dependency>
     6 <dependency>
     7     <groupId>org.apache.poi</groupId>
     8     <artifactId>poi-scratchpad</artifactId>
     9     <version>4.0.1</version>
    10 </dependency>

    效果

  • 相关阅读:
    [学习笔记] 网络最大流的HLPP算法
    [学习笔记] LCT 初步
    js中函数的原型及继承
    关于js中函数的一点总结
    关于css实现水平及垂直居中的方法记录
    js基础总结03 --操作数组
    近期学习es6后对变量提升及let和const的一点思考
    用css和js实现侧边菜单栏点击和鼠标滑动特效
    用css或js实现文本输入框的特效
    Jmeter怎样打印日志
  • 原文地址:https://www.cnblogs.com/lidar/p/12719429.html
Copyright © 2011-2022 走看看