# HOWTO: Word 表格导入 SQLite 并导出字段化 CSV 这份说明面向实际使用:把报备表 `.docx` 导入 SQLite,然后把自动识别出的字段内容导出成 CSV,方便用 WPS/Excel 查看。 ## 1. 准备文件 需要两个文件: - `wordtable2sqlite`:macOS 可执行文件。 - `要导入的 .docx`:例如重要服务事项报备表。 在 Windows 上使用时,对应可执行文件是: - `wordtable2sqlite-windows-amd64.exe` ## 2. 导入单个 Word 文件 macOS 示例: ```bash ./bin/wordtable2sqlite -reset -db report.sqlite input.docx ``` Windows 示例: ```powershell .\wordtable2sqlite-windows-amd64.exe -reset -db report.sqlite input.docx ``` 参数含义: - `-db report.sqlite`:指定输出的 SQLite 数据库文件。 - `-reset`:导入前删除旧数据库,适合重新生成结果。 - `input.docx`:要导入的 Word 文件路径。 执行成功后会看到类似输出: ```text imported input.docx: 1 tables, 31 cells, 15 fields database: report.sqlite ``` 含义是: - `tables`:识别到几张 Word 表格。 - `cells`:保存了多少个原始单元格。 - `fields`:自动抽取了多少个字段化内容。 ## 3. 批量导入多个 Word 文件 把多个 `.docx` 导入到同一个数据库: ```bash ./bin/wordtable2sqlite -reset -db reports.sqlite *.docx ``` 如果是后续追加导入,不想清空旧数据,就不要加 `-reset`: ```bash ./bin/wordtable2sqlite -db reports.sqlite another.docx ``` ## 4. 数据库里有什么表 导入后会生成 4 张主要表: - `documents`:每个导入的 Word 文件。 - `tables`:每个 Word 文件里的表格。 - `cells`:原始单元格内容,保留行号、列号、合并单元格信息。 - `fields`:字段化内容,最适合业务人员查看和检索。 一般看业务内容,优先看 `fields`。 ## 5. 查看字段化内容 普通用户优先导出 CSV 后用 WPS/Excel 打开,见下一节。 如果机器上安装了 `sqlite3`,也可以直接查看数据库: ```bash sqlite3 report.sqlite ``` 进入 SQLite 后执行: ```sql .headers on .mode line SELECT key, value FROM fields ORDER BY id; ``` `.mode line` 适合看长文本。每条记录会显示成: ```text key = 事件过程 value = ... ``` 如果想看表格模式: ```sql .headers on .mode box SELECT key, value FROM fields ORDER BY id; ``` ## 6. 导出字段化内容 CSV 这是最常用的导出方式: ```bash ./bin/wordtable2sqlite export-fields -db report.sqlite -out report-fields.csv ``` 生成的 `report-fields.csv` 可以直接用 WPS/Excel 打开。 如果打开后中文乱码,使用 WPS/Excel 的“从文本/CSV 导入”,编码选择: ```text UTF-8 ``` ## 7. 导出原始单元格 CSV 如果要检查 Word 表格的原始行列结构,导出 `cells`: ```bash ./bin/wordtable2sqlite export-cells -db report.sqlite -out report-cells.csv ``` 字段含义: - `filename`:Word 文件名。 - `table_index`:第几张表,从 0 开始。 - `row_index`:第几行,从 0 开始。 - `cell_index`:该行第几个单元格。 - `col_index`:逻辑列号。 - `col_span`:横向合并了几列。 - `text`:单元格文字。 ## 8. 常用查询 下面这些查询需要本机有 `sqlite3` 或其他 SQLite 查看工具。 查所有字段名: ```sql SELECT key FROM fields ORDER BY id; ``` 查某个字段: ```sql SELECT value FROM fields WHERE key = '工单编号'; ``` 按文件查看字段: ```sql SELECT d.filename, f.key, f.value FROM fields f JOIN documents d ON d.id = f.document_id ORDER BY d.id, f.id; ``` 查原始单元格: ```sql SELECT row_index, cell_index, text FROM cells ORDER BY table_index, row_index, cell_index; ``` ## 9. 推荐查看方式 给业务人员看: 1. 先导出 `report-fields.csv`。 2. 用 WPS/Excel 打开。 3. 每一行就是一个字段:`key` 是字段名,`value` 是字段内容。 给开发或调试看: 1. 打开 `report.sqlite`。 2. 查看 `cells` 判断 Word 原始表格结构。 3. 查看 `fields` 判断字段抽取是否符合预期。 ## 10. 表格复杂度限制 当前字段化抽取主要面向常见报备表: - 一行标题。 - 一行表头。 - 一行或多行数据。 工具会保留所有原始单元格到 `cells`,并按逻辑列处理横向合并的表头。如果 Word 表格包含复杂多行表头、纵向合并单元格、嵌套表格,建议同时导出 `report-cells.csv` 检查原始行列结构。 ## 11. 样例命令模板 导入: ```bash ./bin/wordtable2sqlite -reset -db report.sqlite input.docx ``` 导出字段化 CSV: ```bash ./bin/wordtable2sqlite export-fields -db report.sqlite -out report-fields.csv ``` 导出原始单元格 CSV: ```bash ./bin/wordtable2sqlite export-cells -db report.sqlite -out report-cells.csv ``` ## 12. 开发者验证 如果需要从源码编译或修改代码,使用: ```bash go test ./... go vet ./... go build -o bin/wordtable2sqlite . ```