rust的docx-rs库读取docx文件中的文本内容(逐行注释)

一、安装 docx-rs

1、 命令行

bash 复制代码
cargo add docx-rs

2、 Cargo.toml 文件

toml 复制代码
[dependencies]
docx-rs = "0.4"

二、打开读取docx文件

rust 复制代码
let docx = read_docx(include_bytes!("../template.docx"))?;

注:include_bytes!()读取文件,必输使用字符串字面量,就是直接双引号包裹,需要动态路径时候使用一下方式

rust 复制代码
let docx = read_docx(&fs::read(template_path)?)?;

三、读取段落、表格内容完整代码

rust 复制代码
use docx_rs::{read_docx};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 读取docx文件
    let docx = read_docx(include_bytes!("../example.docx"))?;

    // 遍历文档中的元素
    for child in docx.document.children {
        match child {
            // 内容为文字段落
            docx_rs::DocumentChild::Paragraph(para) => {
                for para_child in para.children {
                    match para_child {
                        // 与表格读取相同的一部分内容
                        docx_rs::ParagraphChild::Run(run) => {
                            for run_child in run.children {
                                match run_child {
                                    // 文本内容
                                    docx_rs::RunChild::Text(text) => {
                                        print!("{}", text.text);
                                    }
                                    _ => {}
                                }
                            }
                        }
                        _ => {}
                    }
                }
                println!();
            }
            // 内容为表格
            docx_rs::DocumentChild::Table(table) => {
                // 遍历表格行
                for row in table.rows {
                    if let docx_rs::TableChild::TableRow(table_row) = row {
                        // 行中的元素
                        for cell in table_row.cells {
                            if let docx_rs::TableRowChild::TableCell(cell) = cell {
                                // 单元格中的内容
                               for child in cell.children {
                                   if let docx_rs::TableCellContent::Paragraph(para) = child {
                                       // 表格内的段落元素(以下同段落的读取)
                                       for para_child in para.children {
                                           if let docx_rs::ParagraphChild::Run(run) =para_child{
                                               // 文本集
                                               for run_child in run.children {
                                                   if let docx_rs::RunChild::Text(text) =run_child{
                                                       print!("{}  ",text.text);
                                                   }
                                               }
                                           }
                                       }
                                   }
                               }
                            }
                        }
                    }
                    println!();
                }
            }
            _ => {
                println!("非段落、表格内容: {:?}", child);
            }
        }
    }
    Ok(())
}
相关推荐
Ivanqhz6 分钟前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_734571769 分钟前
深入理解C++ RAII
开发语言·c++
泡海椒13 分钟前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae21 分钟前
模拟实现memset()(C语言)
c语言·开发语言·后端
wuyk5551 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
船厂电气自动化ai大模型1 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
Amos_Web1 小时前
Rspack 源码解析(十):Hash 与 Asset 生成
前端·rust·源码阅读
柯南46682 小时前
【AI开发之Rust】第 12 课:并发模型与同步原语
rust·编程语言
lv__pf2 小时前
seata【实战 msb】
java·开发语言·后端
点纭2 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#