Java使用poi读取word文档中的表格

使用poi读取文档中的表格,当有多个表格时可以指定需要读取的表格,同时支持读取docx和doc格式。需要添加poi的jar包

测试文档如下图:

程序代码: 

package com.fise19.read;

import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;
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 org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

/**
 * 
 * 读取word文档中表格数据,支持doc、docx
 * @author Fise19
 * 
 */
public class ExportDoc {
	public static void main(String[] args) {
		ExportDoc test = new ExportDoc();
		String filePath = "D:\\new\\测试.docx";
//		String filePath = "D:\\new\\测试.doc";
		test.testWord(filePath);
	}
	/**
	 * 读取文档中表格
	 * @param filePath
	 */
	public void testWord(String filePath){
		try{
			FileInputStream in = new FileInputStream(filePath);//载入文档
			// 处理docx格式 即office2007以后版本
			if(filePath.toLowerCase().endsWith("docx")){
				//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后   
				XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
				Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
				// 设置需要读取的表格  set是设置需要读取的第几个表格,total是文件中表格的总数
				int set = 2, total = 4;
				int num = set;
				// 过滤前面不需要的表格
				for (int i = 0; i < set-1; i++) {
					it.hasNext();
					it.next();
				}
				while(it.hasNext()){
					XWPFTable table = it.next();  
					System.out.println("这是第" + num + "个表的数据");
					List<XWPFTableRow> rows = table.getRows(); 
					//读取每一行数据
					for (int i = 0; i < rows.size(); i++) {
						XWPFTableRow  row = rows.get(i);
						//读取每一列数据
						List<XWPFTableCell> cells = row.getTableCells(); 
						for (int j = 0; j < cells.size(); j++) {
							XWPFTableCell cell = cells.get(j);
							//输出当前的单元格的数据
							System.out.print(cell.getText() + "\t");
						}
						System.out.println();
					}
					// 过滤多余的表格
					while (num < total) {
						it.hasNext();
						it.next();
						num += 1;
					}
				}
			}else{
				// 处理doc格式 即office2003版本
				POIFSFileSystem pfs = new POIFSFileSystem(in);   
				HWPFDocument hwpf = new HWPFDocument(pfs);   
				Range range = hwpf.getRange();//得到文档的读取范围
				TableIterator it = new TableIterator(range);
				// 迭代文档中的表格
				// 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
				int set = 1, total = 4;
				int num = set;
				for (int i = 0; i < set-1; i++) {
					it.hasNext();
					it.next();
				}
				while (it.hasNext()) {   
					Table tb = (Table) it.next();   
					System.out.println("这是第" + num + "个表的数据");
					//迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
					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();
								//去除后面的特殊符号
								if(null != s && !"".equals(s)){
									s = s.substring(0, s.length()-1);
								}
								System.out.print(s + "\t");
							}
						}
						System.out.println();
					} 
					// 过滤多余的表格
					while (num < total) {
						it.hasNext();
						it.next();
						num += 1;
					}
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

运行结果:

这是第2个表的数据
123	1	2	3	
表2-1	1	2	3	
表2-2	1	2	3	

 

 

  • 13
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: 要使用POI获取Word文档表格的数据,可以按照以下步骤进行: 1. 首先,使用POI库打开Word文档。例如,使用XWPFDocument类打开.docx文件。 ```java FileInputStream fis = new FileInputStream("example.docx"); XWPFDocument doc = new XWPFDocument(fis); ``` 2. 然后,使用getTables()方法获取文档的所有表格,该方法返回一个XWPFTable的List。 ```java List<XWPFTable> tables = doc.getTables(); ``` 3. 对于每个表格使用getRows()方法获取表格的所有行,该方法返回一个XWPFTableRow的List。 ```java for(XWPFTable table : tables) { List<XWPFTableRow> rows = table.getRows(); for(XWPFTableRow row : rows) { // 处理行数据 } } ``` 4. 对于每一行,使用getTableCells()方法获取该行的所有单元格,该方法返回一个XWPFTableCell的List。 ```java for(XWPFTable table : tables) { List<XWPFTableRow> rows = table.getRows(); for(XWPFTableRow row : rows) { List<XWPFTableCell> cells = row.getTableCells(); for(XWPFTableCell cell : cells) { // 处理单元格数据 } } } ``` 5. 对于每个单元格,使用getText()方法获取单元格的文本内容。 ```java for(XWPFTable table : tables) { List<XWPFTableRow> rows = table.getRows(); for(XWPFTableRow row : rows) { List<XWPFTableCell> cells = row.getTableCells(); for(XWPFTableCell cell : cells) { String text = cell.getText(); // 处理单元格的文本内容 } } } ``` 这样就可以获取Word文档所有表格的所有行和单元格的数据了。 ### 回答2: 使用Java利用POI获取Word文档表格的数据,可以通过以下步骤实现: 1. 导入POI库:首先需要在Java项目导入POI库,并将库文件添加到项目的classpath。 2. 加载Word文档使用POI的XWPFDocument类加载Word文档,代码如下: ```java InputStream in = new FileInputStream("path/to/word/document.docx"); XWPFDocument doc = new XWPFDocument(in); ``` 3. 获取所有表格:通过getTables()方法获取Word文档的所有表格,代码如下: ```java List<XWPFTable> tables = doc.getTables(); ``` 4. 遍历表格:可以使用循环遍历所有表格,根据需要进行操作,例如获取表格的数据等。 ```java for (XWPFTable table : tables) { // 获取表格的行 List<XWPFTableRow> rows = table.getRows(); // 遍历行 for (XWPFTableRow row : rows) { // 获取行的单元格 List<XWPFTableCell> cells = row.getTableCells(); // 遍历单元格 for (XWPFTableCell cell : cells) { // 获取单元格的内容 String content = cell.getText(); // 处理单元格数据,例如打印或保存到其他地方 System.out.println(content); } } } ``` 通过以上步骤,可以使用Java利用POI获取Word文档表格的数据。根据实际需求,可以对获取到的数据进行处理,例如保存到数据库或生成其他格式的文档。 ### 回答3: Java利用POI可以很方便地获取Word文档表格的数据。下面是实现的步骤: 1. 导入POI库:首先需要在Java工程导入POI的相关库文件,可以使用Maven或手动下载并导入。 2. 创建Word文档对象:使用XWPFDocument类创建一个Word文档对象,打开需要解析的Word文档。 3. 获取文档表格使用getTables()方法获取文档所有的表格,返回一个List对象。 4. 遍历表格使用for循环遍历表格列表,可以通过getTable()方法获取每个表格。 5. 获取表格的行并遍历:使用getRows()方法获取表格所有的行,返回一个List对象。然后使用for循环遍历行列表,可以通过getRow()方法获取每一行。 6. 获取行的单元格并遍历:使用getTableCells()方法获取行所有的单元格,返回一个List对象。然后使用for循环遍历单元格列表,可以通过getTableCell()方法获取每个单元格。 7. 获取单元格的文本:使用getText()方法获取单元格的文本内容。 完整的示例代码如下: ```java import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.io.IOException; import java.util.List; public class ReadTableData { public static void main(String[] args) { try { // 创建Word文档对象 XWPFDocument document = new XWPFDocument(new FileInputStream("example.docx")); // 获取文档的所有表格 List<XWPFTable> tables = document.getTables(); // 遍历表格 for (XWPFTable table : tables) { // 获取表格的所有行 List<XWPFTableRow> rows = table.getRows(); // 遍历行 for (XWPFTableRow row : rows) { // 获取行的所有单元格 List<XWPFTableCell> cells = row.getTableCells(); // 遍历单元格 for (XWPFTableCell cell : cells) { // 获取单元格的文本内容 String text = cell.getText(); System.out.println(text); } } } // 关闭文档 document.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上就是使用POI库获取Word文档表格数据的基本步骤和示例代码。通过POI的各种API可以更加灵活地处理表格的数据,比如可以合并、拆分单元格,修改样式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值