Files

678 lines
15 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"fmt"
"log"
"os"
"github.com/ZeroHawkeye/wordZero/pkg/document"
)
func main() {
// 创建输出目录
if err := os.MkdirAll("examples/output", 0755); err != nil {
log.Fatalf("创建输出目录失败: %v", err)
}
// 创建文档
doc := document.New()
if doc == nil {
log.Fatal("创建文档失败")
}
// 添加标题
doc.AddParagraph("WordZero - 表格样式和外观功能演示")
doc.AddParagraph("")
// 演示1基础表格边框
demonstrateBorders(doc)
// 演示2单元格边框
demonstrateCellBorders(doc)
// 演示3表格背景
demonstrateTableShading(doc)
// 演示4单元格背景
demonstrateCellShading(doc)
// 演示5奇偶行颜色交替
demonstrateAlternatingRows(doc)
// 演示6预定义样式模板
demonstrateStyleTemplates(doc)
// 演示7自定义表格样式
demonstrateCustomStyle(doc)
// 演示8复杂样式组合
demonstrateComplexStyle(doc)
// 演示9无边框表格
demonstrateNoBorders(doc)
// 演示10各种边框样式
demonstrateBorderStyles(doc)
// 保存文档
outputFile := "examples/output/table_style_demo.docx"
if err := doc.Save(outputFile); err != nil {
log.Fatalf("保存文档失败: %v", err)
}
fmt.Printf("表格样式演示文档已保存到: %s\n", outputFile)
}
// demonstrateBorders 演示表格边框设置
func demonstrateBorders(doc *document.Document) {
doc.AddParagraph("1. 表格边框设置演示")
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 5000,
Data: [][]string{
{"姓名", "年龄", "职业"},
{"张三", "25", "工程师"},
{"李四", "30", "设计师"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 设置不同的边框样式
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "FF0000", // 红色粗上边框
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "0000FF", // 蓝色左边框
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 6,
Color: "00FF00", // 绿色双线下边框
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleDashed,
Width: 6,
Color: "FF00FF", // 紫色虚线右边框
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleDotted,
Width: 4,
Color: "808080", // 灰色点线内部水平边框
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "808080", // 灰色内部垂直边框
Space: 0,
},
}
err := table.SetTableBorders(borderConfig)
if err != nil {
log.Fatalf("设置表格边框失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateCellBorders 演示单元格边框设置
func demonstrateCellBorders(doc *document.Document) {
doc.AddParagraph("2. 单元格边框设置演示")
config := &document.TableConfig{
Rows: 2,
Cols: 3,
Width: 4500,
Data: [][]string{
{"单元格A", "单元格B", "单元格C"},
{"数据1", "数据2", "数据3"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 为第一个单元格设置特殊边框
cellBorderConfig := &document.CellBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 8,
Color: "FF0000",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "0000FF",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 6,
Color: "00FF00",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleDashed,
Width: 4,
Color: "FF00FF",
Space: 0,
},
DiagDown: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 2,
Color: "FFFF00", // 黄色对角线
Space: 0,
},
}
err := table.SetCellBorders(0, 0, cellBorderConfig)
if err != nil {
log.Fatalf("设置单元格边框失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateTableShading 演示表格背景设置
func demonstrateTableShading(doc *document.Document) {
doc.AddParagraph("3. 表格背景设置演示")
config := &document.TableConfig{
Rows: 3,
Cols: 2,
Width: 4000,
Data: [][]string{
{"产品", "价格"},
{"产品A", "¥100"},
{"产品B", "¥200"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 设置表格整体背景
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternPct25,
ForegroundColor: "000000",
BackgroundColor: "E0E0E0",
}
err := table.SetTableShading(shadingConfig)
if err != nil {
log.Fatalf("设置表格背景失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateCellShading 演示单元格背景设置
func demonstrateCellShading(doc *document.Document) {
doc.AddParagraph("4. 单元格背景设置演示")
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 4500,
Data: [][]string{
{"红色", "绿色", "蓝色"},
{"黄色", "紫色", "青色"},
{"橙色", "粉色", "灰色"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 为不同单元格设置不同颜色
colors := [][]string{
{"FF0000", "00FF00", "0000FF"}, // 红绿蓝
{"FFFF00", "FF00FF", "00FFFF"}, // 黄紫青
{"FFA500", "FFC0CB", "808080"}, // 橙粉灰
}
patterns := [][]document.ShadingPattern{
{document.ShadingPatternSolid, document.ShadingPatternPct50, document.ShadingPatternPct25},
{document.ShadingPatternSolid, document.ShadingPatternPct75, document.ShadingPatternPct10},
{document.ShadingPatternPct60, document.ShadingPatternPct40, document.ShadingPatternSolid},
}
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
shadingConfig := &document.ShadingConfig{
Pattern: patterns[i][j],
BackgroundColor: colors[i][j],
}
err := table.SetCellShading(i, j, shadingConfig)
if err != nil {
log.Fatalf("设置单元格(%d,%d)背景失败: %v", i, j, err)
}
}
}
doc.AddParagraph("")
}
// demonstrateAlternatingRows 演示奇偶行颜色交替
func demonstrateAlternatingRows(doc *document.Document) {
doc.AddParagraph("5. 奇偶行颜色交替演示")
config := &document.TableConfig{
Rows: 6,
Cols: 3,
Width: 4500,
Data: [][]string{
{"序号", "姓名", "分数"},
{"1", "张三", "85"},
{"2", "李四", "92"},
{"3", "王五", "78"},
{"4", "赵六", "95"},
{"5", "钱七", "88"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 设置奇偶行颜色交替
err := table.SetAlternatingRowColors("F0F0F0", "FFFFFF")
if err != nil {
log.Fatalf("设置奇偶行颜色交替失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateStyleTemplates 演示预定义样式模板
func demonstrateStyleTemplates(doc *document.Document) {
doc.AddParagraph("6. 预定义样式模板演示")
// 演示Grid样式
config1 := &document.TableConfig{
Rows: 4,
Cols: 3,
Width: 4500,
Data: [][]string{
{"项目", "预算", "实际"},
{"开发", "10000", "9500"},
{"测试", "5000", "5200"},
{"总计", "15000", "14700"},
},
}
table1 := doc.AddTable(config1)
if table1 == nil {
log.Fatal("创建表格失败")
}
styleConfig1 := &document.TableStyleConfig{
Template: document.TableStyleTemplateGrid,
FirstRowHeader: true,
LastRowTotal: true,
BandedRows: true,
BandedColumns: false,
}
err := table1.ApplyTableStyle(styleConfig1)
if err != nil {
log.Fatalf("应用Grid样式失败: %v", err)
}
doc.AddParagraph("")
// 演示Colorful样式
config2 := &document.TableConfig{
Rows: 4,
Cols: 3,
Width: 4500,
Data: [][]string{
{"部门", "人数", "预算"},
{"技术部", "20", "500万"},
{"销售部", "15", "300万"},
{"市场部", "10", "200万"},
},
}
table2 := doc.AddTable(config2)
if table2 == nil {
log.Fatal("创建表格失败")
}
styleConfig2 := &document.TableStyleConfig{
Template: document.TableStyleTemplateColorful1,
FirstRowHeader: true,
FirstColumnHeader: true,
BandedRows: true,
}
err = table2.ApplyTableStyle(styleConfig2)
if err != nil {
log.Fatalf("应用Colorful样式失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateCustomStyle 演示自定义表格样式
func demonstrateCustomStyle(doc *document.Document) {
doc.AddParagraph("7. 自定义表格样式演示")
config := &document.TableConfig{
Rows: 4,
Cols: 3,
Width: 4500,
Data: [][]string{
{"功能", "状态", "备注"},
{"登录", "完成", "已测试"},
{"注册", "开发中", "50%"},
{"支付", "计划中", "下个版本"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 创建自定义边框配置
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "2E75B6",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "2E75B6",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "2E75B6",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "2E75B6",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "D0D0D0",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "D0D0D0",
Space: 0,
},
}
// 创建自定义背景配置
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternPct10,
BackgroundColor: "E7F3FF",
}
// 应用自定义样式
err := table.CreateCustomTableStyle("CustomBlue", "蓝色主题", borderConfig, shadingConfig, true)
if err != nil {
log.Fatalf("创建自定义表格样式失败: %v", err)
}
doc.AddParagraph("")
}
// demonstrateComplexStyle 演示复杂样式组合
func demonstrateComplexStyle(doc *document.Document) {
doc.AddParagraph("8. 复杂样式组合演示")
config := &document.TableConfig{
Rows: 5,
Cols: 4,
Width: 6000,
Data: [][]string{
{"部门", "Q1", "Q2", "Q3"},
{"销售部", "120万", "135万", "150万"},
{"技术部", "80万", "90万", "95万"},
{"市场部", "60万", "70万", "85万"},
{"总计", "260万", "295万", "330万"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 应用基础样式
styleConfig := &document.TableStyleConfig{
Template: document.TableStyleTemplateColorful2,
FirstRowHeader: true,
LastRowTotal: true,
FirstColumnHeader: true,
BandedRows: false,
}
err := table.ApplyTableStyle(styleConfig)
if err != nil {
log.Fatalf("应用基础样式失败: %v", err)
}
// 设置特殊边框
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 8,
Color: "2E75B6",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 8,
Color: "2E75B6",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "B0B0B0",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "B0B0B0",
Space: 0,
},
}
err = table.SetTableBorders(borderConfig)
if err != nil {
log.Fatalf("设置边框失败: %v", err)
}
// 为标题行设置特殊背景
for j := 0; j < 4; j++ {
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternSolid,
BackgroundColor: "2E75B6",
ForegroundColor: "FFFFFF",
}
err = table.SetCellShading(0, j, shadingConfig)
if err != nil {
log.Fatalf("设置标题行背景失败: %v", err)
}
}
// 为总计行设置特殊背景
for j := 0; j < 4; j++ {
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternSolid,
BackgroundColor: "FFFF99",
}
err = table.SetCellShading(4, j, shadingConfig)
if err != nil {
log.Fatalf("设置总计行背景失败: %v", err)
}
}
doc.AddParagraph("")
}
// demonstrateNoBorders 演示无边框表格
func demonstrateNoBorders(doc *document.Document) {
doc.AddParagraph("9. 无边框表格演示")
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 4500,
Data: [][]string{
{"项目A", "项目B", "项目C"},
{"说明1", "说明2", "说明3"},
{"结果1", "结果2", "结果3"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatal("创建表格失败")
}
// 移除所有边框
err := table.RemoveTableBorders()
if err != nil {
log.Fatalf("移除表格边框失败: %v", err)
}
// 设置轻微的背景色以区分单元格
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
var bgColor string
if (i+j)%2 == 0 {
bgColor = "F8F8F8"
} else {
bgColor = "FFFFFF"
}
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternSolid,
BackgroundColor: bgColor,
}
err = table.SetCellShading(i, j, shadingConfig)
if err != nil {
log.Fatalf("设置单元格背景失败: %v", err)
}
}
}
doc.AddParagraph("")
}
// demonstrateBorderStyles 演示各种边框样式
func demonstrateBorderStyles(doc *document.Document) {
doc.AddParagraph("10. 各种边框样式演示")
borderStyles := []struct {
style document.BorderStyle
name string
}{
{document.BorderStyleSingle, "单线"},
{document.BorderStyleThick, "粗线"},
{document.BorderStyleDouble, "双线"},
{document.BorderStyleDotted, "点线"},
{document.BorderStyleDashed, "虚线"},
{document.BorderStyleDotDash, "点划线"},
{document.BorderStyleWave, "波浪线"},
}
for i, styleInfo := range borderStyles {
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 3000,
Data: [][]string{
{fmt.Sprintf("样式%d", i+1), styleInfo.name},
{"演示", "数据"},
},
}
table := doc.AddTable(config)
if table == nil {
log.Fatalf("创建表格%d失败", i+1)
}
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: styleInfo.style,
Width: 6,
Color: "000000",
Space: 0,
},
Left: &document.BorderConfig{
Style: styleInfo.style,
Width: 6,
Color: "000000",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: styleInfo.style,
Width: 6,
Color: "000000",
Space: 0,
},
Right: &document.BorderConfig{
Style: styleInfo.style,
Width: 6,
Color: "000000",
Space: 0,
},
}
err := table.SetTableBorders(borderConfig)
if err != nil {
log.Fatalf("设置表格%d边框失败: %v", i+1, err)
}
if i < len(borderStyles)-1 {
doc.AddParagraph("")
}
}
}