mirror of
https://github.com/ZeroHawkeye/wordZero.git
synced 2025-10-18 21:54:33 +08:00
更新README.md,新增表格功能和页面设置功能的详细描述;在document.go中添加文档主体元素接口及其实现,支持段落和表格元素类型。
This commit is contained in:
373
examples/cell_advanced/main.go
Normal file
373
examples/cell_advanced/main.go
Normal file
@@ -0,0 +1,373 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/ZeroHawkeye/wordZero/pkg/document"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 创建新文档
|
||||
doc := document.New()
|
||||
|
||||
fmt.Println("=== 演示高级单元格操作功能 ===")
|
||||
|
||||
// 1. 创建表格
|
||||
fmt.Println("\n1. 创建基础表格...")
|
||||
config := &document.TableConfig{
|
||||
Rows: 4,
|
||||
Cols: 4,
|
||||
Width: 8000,
|
||||
Data: [][]string{
|
||||
{"学号", "姓名", "语文", "数学"},
|
||||
{"001", "张三", "85", "92"},
|
||||
{"002", "李四", "78", "88"},
|
||||
{"003", "王五", "90", "85"},
|
||||
},
|
||||
}
|
||||
|
||||
table := doc.AddTable(config)
|
||||
if table == nil {
|
||||
log.Fatal("创建表格失败")
|
||||
}
|
||||
|
||||
// 2. 设置表头格式
|
||||
fmt.Println("2. 设置表头格式...")
|
||||
headerFormat := &document.CellFormat{
|
||||
TextFormat: &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
FontColor: "FFFFFF", // 白色文字
|
||||
FontName: "微软雅黑",
|
||||
},
|
||||
HorizontalAlign: document.CellAlignCenter,
|
||||
VerticalAlign: document.CellVAlignCenter,
|
||||
}
|
||||
|
||||
// 为第一行的每个单元格设置表头格式
|
||||
for col := 0; col < 4; col++ {
|
||||
err := table.SetCellFormat(0, col, headerFormat)
|
||||
if err != nil {
|
||||
log.Printf("设置表头格式失败: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 设置数据行格式
|
||||
fmt.Println("3. 设置数据行格式...")
|
||||
dataFormat := &document.CellFormat{
|
||||
TextFormat: &document.TextFormat{
|
||||
FontSize: 12,
|
||||
FontName: "宋体",
|
||||
},
|
||||
HorizontalAlign: document.CellAlignCenter,
|
||||
VerticalAlign: document.CellVAlignCenter,
|
||||
}
|
||||
|
||||
// 为数据行设置格式
|
||||
for row := 1; row < 4; row++ {
|
||||
for col := 0; col < 4; col++ {
|
||||
err := table.SetCellFormat(row, col, dataFormat)
|
||||
if err != nil {
|
||||
log.Printf("设置数据格式失败: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 演示富文本单元格
|
||||
fmt.Println("4. 添加富文本单元格...")
|
||||
|
||||
// 在表格下方添加一个新表格用于演示富文本
|
||||
richTextConfig := &document.TableConfig{
|
||||
Rows: 2,
|
||||
Cols: 3,
|
||||
Width: 8000,
|
||||
}
|
||||
|
||||
richTable := doc.AddTable(richTextConfig)
|
||||
|
||||
// 在同一个单元格中添加不同格式的文本
|
||||
err := richTable.SetCellFormattedText(0, 0, "标题:", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置富文本失败: %v", err)
|
||||
}
|
||||
|
||||
err = richTable.AddCellFormattedText(0, 0, "重要信息", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontColor: "FF0000", // 红色
|
||||
FontSize: 12,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("添加富文本失败: %v", err)
|
||||
}
|
||||
|
||||
err = richTable.AddCellFormattedText(0, 0, "(普通文本)", &document.TextFormat{
|
||||
FontSize: 10,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("添加富文本失败: %v", err)
|
||||
}
|
||||
|
||||
// 5. 演示单元格合并
|
||||
fmt.Println("5. 演示单元格合并...")
|
||||
|
||||
// 创建合并演示表格
|
||||
mergeConfig := &document.TableConfig{
|
||||
Rows: 5,
|
||||
Cols: 5,
|
||||
Width: 8000,
|
||||
}
|
||||
|
||||
mergeTable := doc.AddTable(mergeConfig)
|
||||
|
||||
// 设置初始数据
|
||||
for row := 0; row < 5; row++ {
|
||||
for col := 0; col < 5; col++ {
|
||||
text := fmt.Sprintf("R%dC%d", row+1, col+1)
|
||||
err := mergeTable.SetCellText(row, col, text)
|
||||
if err != nil {
|
||||
log.Printf("设置单元格文本失败: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 水平合并:合并第一行的第2-4列
|
||||
err = mergeTable.MergeCellsHorizontal(0, 1, 3)
|
||||
if err != nil {
|
||||
log.Printf("水平合并失败: %v", err)
|
||||
}
|
||||
|
||||
// 设置合并单元格的内容
|
||||
err = mergeTable.SetCellFormattedText(0, 1, "水平合并单元格", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
FontColor: "0000FF",
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置合并单元格内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 垂直合并:合并第一列的第2-4行
|
||||
err = mergeTable.MergeCellsVertical(1, 3, 0)
|
||||
if err != nil {
|
||||
log.Printf("垂直合并失败: %v", err)
|
||||
}
|
||||
|
||||
// 设置垂直合并单元格的内容
|
||||
err = mergeTable.SetCellFormattedText(1, 0, "垂直合并", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
FontColor: "00FF00",
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置垂直合并单元格内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 区域合并:合并右下角2x2区域
|
||||
err = mergeTable.MergeCellsRange(3, 4, 3, 4)
|
||||
if err != nil {
|
||||
log.Printf("区域合并失败: %v", err)
|
||||
}
|
||||
|
||||
// 设置区域合并单元格的内容
|
||||
err = mergeTable.SetCellFormattedText(3, 3, "区域合并", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
FontColor: "FF00FF",
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置区域合并单元格内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 6. 检查合并状态
|
||||
fmt.Println("6. 检查合并状态...")
|
||||
|
||||
mergeInfo, err := mergeTable.GetMergedCellInfo(0, 1)
|
||||
if err != nil {
|
||||
log.Printf("获取合并信息失败: %v", err)
|
||||
} else {
|
||||
fmt.Printf("单元格(0,1)合并信息: %+v\n", mergeInfo)
|
||||
}
|
||||
|
||||
// 7. 演示单元格内容和格式操作
|
||||
fmt.Println("7. 演示内容和格式操作...")
|
||||
|
||||
// 创建操作演示表格
|
||||
opConfig := &document.TableConfig{
|
||||
Rows: 3,
|
||||
Cols: 3,
|
||||
Width: 6000,
|
||||
}
|
||||
|
||||
opTable := doc.AddTable(opConfig)
|
||||
|
||||
// 设置带格式的内容
|
||||
err = opTable.SetCellFormattedText(0, 0, "原始内容", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 14,
|
||||
FontColor: "FF0000",
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置格式化内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 清空内容但保留格式
|
||||
err = opTable.ClearCellContent(0, 1)
|
||||
if err != nil {
|
||||
log.Printf("清空内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 设置新内容
|
||||
err = opTable.SetCellText(0, 1, "新内容")
|
||||
if err != nil {
|
||||
log.Printf("设置新内容失败: %v", err)
|
||||
}
|
||||
|
||||
// 清空格式但保留内容
|
||||
err = opTable.ClearCellFormat(0, 2)
|
||||
if err != nil {
|
||||
log.Printf("清空格式失败: %v", err)
|
||||
}
|
||||
|
||||
// 8. 保存文档
|
||||
fmt.Println("8. 保存文档...")
|
||||
|
||||
// 添加说明段落
|
||||
doc.AddParagraph("本文档演示了wordZero库的高级单元格操作功能:")
|
||||
doc.AddParagraph("1. 第一个表格展示了基础表格创建和格式设置")
|
||||
doc.AddParagraph("2. 第二个表格展示了富文本单元格功能")
|
||||
doc.AddParagraph("3. 第三个表格展示了单元格合并功能")
|
||||
doc.AddParagraph("4. 第四个表格展示了内容和格式操作功能")
|
||||
|
||||
// 9. 演示文字方向功能
|
||||
fmt.Println("9. 演示文字方向功能...")
|
||||
|
||||
// 添加文字方向演示说明
|
||||
doc.AddParagraph("")
|
||||
doc.AddParagraph("=== 单元格文字方向演示 ===")
|
||||
|
||||
// 创建文字方向演示表格
|
||||
directionConfig := &document.TableConfig{
|
||||
Rows: 3,
|
||||
Cols: 3,
|
||||
Width: 8000,
|
||||
}
|
||||
|
||||
directionTable := doc.AddTable(directionConfig)
|
||||
|
||||
// 演示不同的文字方向
|
||||
directions := []struct {
|
||||
name string
|
||||
direction document.CellTextDirection
|
||||
row int
|
||||
col int
|
||||
}{
|
||||
{"水平从左到右", document.TextDirectionLR, 0, 0},
|
||||
{"垂直从上到下", document.TextDirectionTB, 0, 1},
|
||||
{"垂直从下到上", document.TextDirectionBT, 0, 2},
|
||||
{"水平从右到左", document.TextDirectionRL, 1, 0},
|
||||
{"垂直显示上下", document.TextDirectionTBV, 1, 1},
|
||||
{"垂直显示下上", document.TextDirectionBTV, 1, 2},
|
||||
{"混合格式文字", document.TextDirectionTB, 2, 0},
|
||||
{"居中垂直文字", document.TextDirectionTB, 2, 1},
|
||||
{"默认方向", document.TextDirectionLR, 2, 2},
|
||||
}
|
||||
|
||||
for _, dir := range directions {
|
||||
// 设置单元格文字
|
||||
err := directionTable.SetCellText(dir.row, dir.col, dir.name)
|
||||
if err != nil {
|
||||
log.Printf("设置单元格文字失败: %v", err)
|
||||
}
|
||||
|
||||
// 设置文字方向
|
||||
err = directionTable.SetCellTextDirection(dir.row, dir.col, dir.direction)
|
||||
if err != nil {
|
||||
log.Printf("设置文字方向失败: %v", err)
|
||||
}
|
||||
|
||||
// 为某些特殊单元格添加格式
|
||||
if dir.row == 2 && dir.col == 0 {
|
||||
// 混合格式演示
|
||||
err = directionTable.SetCellFormattedText(dir.row, dir.col, "混合", &document.TextFormat{
|
||||
Bold: true,
|
||||
FontColor: "FF0000",
|
||||
FontSize: 14,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("设置富文本失败: %v", err)
|
||||
}
|
||||
|
||||
err = directionTable.AddCellFormattedText(dir.row, dir.col, "格式", &document.TextFormat{
|
||||
Italic: true,
|
||||
FontColor: "0000FF",
|
||||
FontSize: 12,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("添加富文本失败: %v", err)
|
||||
}
|
||||
|
||||
err = directionTable.AddCellFormattedText(dir.row, dir.col, "文字", &document.TextFormat{
|
||||
FontColor: "00FF00",
|
||||
FontSize: 10,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("添加富文本失败: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if dir.row == 2 && dir.col == 1 {
|
||||
// 居中垂直文字
|
||||
format := &document.CellFormat{
|
||||
TextFormat: &document.TextFormat{
|
||||
Bold: true,
|
||||
FontSize: 16,
|
||||
},
|
||||
HorizontalAlign: document.CellAlignCenter,
|
||||
VerticalAlign: document.CellVAlignCenter,
|
||||
TextDirection: document.TextDirectionTB,
|
||||
}
|
||||
|
||||
err = directionTable.SetCellFormat(dir.row, dir.col, format)
|
||||
if err != nil {
|
||||
log.Printf("设置单元格格式失败: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 验证文字方向设置
|
||||
fmt.Println("10. 验证文字方向设置...")
|
||||
for _, dir := range directions {
|
||||
actualDirection, err := directionTable.GetCellTextDirection(dir.row, dir.col)
|
||||
if err != nil {
|
||||
log.Printf("获取文字方向失败: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if actualDirection == dir.direction {
|
||||
fmt.Printf("✓ 单元格(%d,%d) 文字方向设置正确: %s\n", dir.row, dir.col, dir.direction)
|
||||
} else {
|
||||
fmt.Printf("✗ 单元格(%d,%d) 文字方向不匹配,期望: %s,实际: %s\n",
|
||||
dir.row, dir.col, dir.direction, actualDirection)
|
||||
}
|
||||
}
|
||||
|
||||
// 11. 保存文档
|
||||
fmt.Println("11. 保存文档...")
|
||||
|
||||
// 更新说明
|
||||
doc.AddParagraph("• 单元格文字方向设置(支持6种方向)")
|
||||
doc.AddParagraph("• 文字方向与其他格式的组合使用")
|
||||
|
||||
filename := "../output/cell_advanced_demo.docx"
|
||||
err = doc.Save(filename)
|
||||
if err != nil {
|
||||
log.Fatalf("保存文档失败: %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("文档已保存为: %s\n", filename)
|
||||
fmt.Println("=== 演示完成 ===")
|
||||
}
|
Reference in New Issue
Block a user