更新 GetCellText 方法,返回单元格内所有段落与 Run 的完整文本,并以换行符分隔,修复多行内容丢失的问题

This commit is contained in:
ZeroHawkeye
2025-09-24 00:46:23 +00:00
parent 34c7a6b9e7
commit 31118d7bc5
3 changed files with 26 additions and 5 deletions

View File

@@ -1,5 +1,13 @@
# WordZero 更新日志 # WordZero 更新日志
## [Unreleased]
### 🐛 修复
- `Table.GetCellText` 现在返回单元格内所有段落与所有 Run 的完整文本,并以 `\n` 连接段落,修复此前只能获取第一段首个 Run 文本导致多行内容丢失的问题。
- 影响:如果下游代码假设无换行符,需自行 `strings.ReplaceAll(text, "\n", "")` 或按需拆分。
- 限制:同一段落内的 `<w:br/>` 软换行尚未单独解析(未来可扩展)。
## [v1.3.6] - 2025-06-04 ## [v1.3.6] - 2025-06-04
### 🚀 新增功能 ### 🚀 新增功能

View File

@@ -381,7 +381,10 @@ func demonstrateTemplateInheritance() {
### 单元格操作 ### 单元格操作
- [`GetCell(row, col int)`](table.go#L502) - 获取指定单元格 - [`GetCell(row, col int)`](table.go#L502) - 获取指定单元格
- [`SetCellText(row, col int, text string)`](table.go#L515) - 设置单元格文本 - [`SetCellText(row, col int, text string)`](table.go#L515) - 设置单元格文本
- [`GetCellText(row, col int)`](table.go#L548) - 获取单元格文本 - [`GetCellText(row, col int)`](table.go#L623) - 获取单元格文本(已升级:返回单元格内所有段落与 Run 的完整内容,段落之间使用 `\n` 分隔)
- 旧行为:仅返回第一个段落的第一个 Run 文本,导致多行/软换行内容丢失
- 新行为:遍历所有段落与其下所有 Run拼接文本空段落跳过内容但仍产生段落换行除末尾
- 注意:如果未来需要保留 Word 中 `<w:br/>`(同一段落内的手动软换行),需扩展解析逻辑;当前仅按段落分隔
- [`SetCellFormat(row, col int, format *CellFormat)`](table.go#L691) - 设置单元格格式 - [`SetCellFormat(row, col int, format *CellFormat)`](table.go#L691) - 设置单元格格式
- [`GetCellFormat(row, col int)`](table.go#L1238) - 获取单元格格式 - [`GetCellFormat(row, col int)`](table.go#L1238) - 获取单元格格式

View File

@@ -627,11 +627,21 @@ func (t *Table) GetCellText(row, col int) (string, error) {
return "", err return "", err
} }
if len(cell.Paragraphs) == 0 || len(cell.Paragraphs[0].Runs) == 0 { if len(cell.Paragraphs) == 0 {
return "", nil return "", nil
} }
return cell.Paragraphs[0].Runs[0].Text.Content, nil var result string
for idx, para := range cell.Paragraphs {
for _, run := range para.Runs {
result += run.Text.Content
}
// 段落之间添加软换行符(除最后一个段落)
if idx < len(cell.Paragraphs)-1 {
result += "\n"
}
}
return result, nil
} }
// GetRowCount 获取表格行数 // GetRowCount 获取表格行数