一、安装 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(())
}