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(())
}
相关推荐
花褪残红青杏小7 小时前
Rust图像处理第7节-马赛克像素化:分块取平均色实现打码风格
rust·webassembly·图形学
doiito1 天前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito1 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小1 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰2 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
星栈2 天前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
mCell2 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
武子康2 天前
调查研究-201 Rust 里的 dev build 和 release build:为什么同一份代码性能差这么多?
后端·架构·rust
doiito2 天前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent
星栈3 天前
我用 Rust + Dioxus 做了个全栈跨平台笔记应用:再把新建、编辑和交付补上
前端·rust·前端框架