拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

github.com/ZeroHawkeye/wordZero 将三列的表格 , 竖的排两个表格

github.com/ZeroHawkeye/wordZero 将三列的表格 , 竖的排两个表格

根据你提供的 `wordZero` 库信息,将三列表格改为竖排排列两个表格,可以通过**嵌套表格**来实现。即在原表格的某个单元格内,再嵌入一个新的表格。

### 实现思路

`wordZero` 的 `TableCell` 结构支持嵌套表格(`Tables` 字段)。你可以创建一个外层表格(比如 1 行 1 列),然后在这个单元格内放置两个独立的表格,它们就会以垂直方向堆叠显示。

### 代码示例

以下是一个基于 `wordZero` API 的示例代码:

```go
package main

import (
"log"
"github.com/zerx-lab/wordZero/pkg/document"
)

func main() {
doc := document.New()

// 1. 创建外层容器表格(1行1列,用于承载两个内层表格)
outerConfig := &document.TableConfig{
Rows: 1,
Columns: 1,
Width: 9000, // 可根据需要调整宽度
}
outerTable := doc.AddTable(outerConfig)

// 2. 创建第一个三列表格(内层表格1)
table1 := &document.Table{
Properties: &document.TableProperties{
TableW: &document.TableWidth{W: "9000", Type: "dxa"},
},
Rows: []document.TableRow{
{Cells: []document.TableCell{
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表1-列1"}}}}}},
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表1-列2"}}}}}},
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表1-列3"}}}}}},
}},
// 可继续添加更多行...
},
}

// 3. 创建第二个三列表格(内层表格2)
table2 := &document.Table{
Properties: &document.TableProperties{
TableW: &document.TableWidth{W: "9000", Type: "dxa"},
},
Rows: []document.TableRow{
{Cells: []document.TableCell{
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表2-列1"}}}}}},
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表2-列2"}}}}}},
{Paragraphs: []document.Paragraph{{Runs: []document.Run{{Text: document.Text{Content: "表2-列3"}}}}}},
}},
// 可继续添加更多行...
},
}

// 4. 将两个表格依次放入外层容器的单元格中
outerTable.Rows[0].Cells[0].Tables = []document.Table{*table1, *table2}

// 5. 确保单元格至少有一个段落(OOXML 规范要求)
if len(outerTable.Rows[0].Cells[0].Paragraphs) == 0 {
outerTable.Rows[0].Cells[0].Paragraphs = []document.Paragraph{{}}
}

// 保存文档
if err := doc.Save("nested_tables.docx"); err != nil {
log.Fatal(err)
}
}
```

### 关键点

1. **外层容器**:创建一个 1 行 1 列的表格作为容器,它的单元格将用来放置两个内层表格。
2. **内层表格**:两个内层表格都是三列结构,通过 `Table` 结构体直接构建。
3. **嵌套方式**:将 `table1` 和 `table2` 的副本赋值给 `outerTable.Rows[0].Cells[0].Tables` 切片。切片中元素的顺序决定了它们在文档中的垂直排列顺序。
4. **OOXML 规范**:`TableCell` 中必须至少包含一个段落(`Paragraphs`),即使它是空的,否则可能无法正确渲染。

如果希望在两个表格之间添加一些间距,可以在外层单元格的 `Paragraphs` 中插入空段落,或者为内层表格设置不同的上边距。

返回列表