Files
wordZero/examples/table/table_example.go

271 lines
6.6 KiB
Go
Raw 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 演示WordZero表格功能
package main
import (
"fmt"
"log"
"github.com/ZeroHawkeye/wordZero/pkg/document"
)
func main() {
fmt.Println("=== WordZero 表格功能演示 ===")
// 创建新文档
doc := document.New()
// 添加文档标题
title := doc.AddParagraph("WordZero 表格功能演示")
title.SetAlignment(document.AlignCenter)
// 演示1创建基础表格
fmt.Println("1. 创建基础表格...")
demonstrateBasicTable(doc)
// 演示2表格数据操作
fmt.Println("2. 演示表格数据操作...")
demonstrateTableDataOperations(doc)
// 演示3表格结构操作
fmt.Println("3. 演示表格结构操作...")
demonstrateTableStructureOperations(doc)
// 演示4表格复制和清空
fmt.Println("4. 演示表格复制和清空...")
demonstrateTableCopyAndClear(doc)
// 演示5表格删除操作
fmt.Println("5. 演示表格删除操作...")
demonstrateTableDeletion(doc)
// 保存文档
outputFile := "../output/table_demo.docx"
err := doc.Save(outputFile)
if err != nil {
log.Fatalf("保存文档失败: %v", err)
}
fmt.Printf("表格演示文档已保存到: %s\n", outputFile)
fmt.Println("=== 演示完成 ===")
}
// demonstrateBasicTable 演示基础表格创建
func demonstrateBasicTable(doc *document.Document) {
doc.AddParagraph("1. 基础表格创建")
// 创建一个3x4的表格包含初始数据
tableData := [][]string{
{"姓名", "年龄", "职位", "部门"},
{"张三", "28", "工程师", "技术部"},
{"李四", "32", "经理", "销售部"},
}
config := &document.TableConfig{
Rows: 3,
Cols: 4,
Width: 8000, // 8000磅宽度
Data: tableData,
}
table := doc.AddTable(config)
if table != nil {
fmt.Printf(" 创建表格成功:%dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
doc.AddParagraph("") // 空行分隔
}
// demonstrateTableDataOperations 演示表格数据操作
func demonstrateTableDataOperations(doc *document.Document) {
doc.AddParagraph("2. 表格数据操作")
// 创建一个简单的2x3表格
config := &document.TableConfig{
Rows: 2,
Cols: 3,
Width: 6000,
Data: [][]string{
{"产品", "价格", "库存"},
{"笔记本", "5000", "50"},
},
}
table := doc.AddTable(config)
if table == nil {
fmt.Println(" 创建表格失败")
return
}
// 设置单元格内容
err := table.SetCellText(0, 0, "商品名称")
if err != nil {
fmt.Printf(" 设置单元格失败: %v\n", err)
} else {
fmt.Println(" 设置单元格内容成功")
}
// 获取单元格内容
cellText, err := table.GetCellText(1, 1)
if err != nil {
fmt.Printf(" 获取单元格失败: %v\n", err)
} else {
fmt.Printf(" 单元格(1,1)内容: %s\n", cellText)
}
doc.AddParagraph("") // 空行分隔
}
// demonstrateTableStructureOperations 演示表格结构操作
func demonstrateTableStructureOperations(doc *document.Document) {
doc.AddParagraph("3. 表格结构操作")
// 创建基础表格
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 4000,
Data: [][]string{
{"A1", "B1"},
{"A2", "B2"},
},
}
table := doc.AddTable(config)
if table == nil {
fmt.Println(" 创建表格失败")
return
}
fmt.Printf(" 初始表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
// 插入行
err := table.InsertRow(1, []string{"A1.5", "B1.5"})
if err != nil {
fmt.Printf(" 插入行失败: %v\n", err)
} else {
fmt.Printf(" 插入行后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
// 添加行到末尾
err = table.AppendRow([]string{"A末", "B末"})
if err != nil {
fmt.Printf(" 添加行失败: %v\n", err)
} else {
fmt.Printf(" 添加行后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
// 插入列
err = table.InsertColumn(1, []string{"C1", "C1.5", "C2", "C末"}, 1000)
if err != nil {
fmt.Printf(" 插入列失败: %v\n", err)
} else {
fmt.Printf(" 插入列后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
// 添加列到末尾
err = table.AppendColumn([]string{"D1", "D1.5", "D2", "D末"}, 1000)
if err != nil {
fmt.Printf(" 添加列失败: %v\n", err)
} else {
fmt.Printf(" 添加列后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
doc.AddParagraph("") // 空行分隔
}
// demonstrateTableCopyAndClear 演示表格复制和清空
func demonstrateTableCopyAndClear(doc *document.Document) {
doc.AddParagraph("4. 表格复制和清空")
// 创建源表格
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 4000,
Data: [][]string{
{"原始1", "原始2"},
{"原始3", "原始4"},
},
}
sourceTable := doc.AddTable(config)
if sourceTable == nil {
fmt.Println(" 创建源表格失败")
return
}
// 复制表格
copiedTable := sourceTable.CopyTable()
if copiedTable != nil {
fmt.Println(" 表格复制成功")
// 修改复制的表格内容以区分
copiedTable.SetCellText(0, 0, "复制1")
copiedTable.SetCellText(0, 1, "复制2")
copiedTable.SetCellText(1, 0, "复制3")
copiedTable.SetCellText(1, 1, "复制4")
// 将复制的表格添加到文档
doc.Body.Tables = append(doc.Body.Tables, *copiedTable)
fmt.Println(" 复制的表格已添加到文档")
}
// 清空原表格内容
sourceTable.ClearTable()
fmt.Println(" 原表格内容已清空")
doc.AddParagraph("") // 空行分隔
}
// demonstrateTableDeletion 演示表格删除操作
func demonstrateTableDeletion(doc *document.Document) {
doc.AddParagraph("5. 表格删除操作")
// 创建测试表格
config := &document.TableConfig{
Rows: 4,
Cols: 4,
Width: 6000,
Data: [][]string{
{"1", "2", "3", "4"},
{"5", "6", "7", "8"},
{"9", "10", "11", "12"},
{"13", "14", "15", "16"},
},
}
table := doc.AddTable(config)
if table == nil {
fmt.Println(" 创建测试表格失败")
return
}
fmt.Printf(" 初始表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
// 删除第2行索引1
err := table.DeleteRow(1)
if err != nil {
fmt.Printf(" 删除行失败: %v\n", err)
} else {
fmt.Printf(" 删除行后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
// 删除第2列索引1
err = table.DeleteColumn(1)
if err != nil {
fmt.Printf(" 删除列失败: %v\n", err)
} else {
fmt.Printf(" 删除列后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
// 删除多行索引1到2
err = table.DeleteRows(1, 2)
if err != nil {
fmt.Printf(" 删除多行失败: %v\n", err)
} else {
fmt.Printf(" 删除多行后表格大小: %dx%d\n", table.GetRowCount(), table.GetColumnCount())
}
doc.AddParagraph("") // 空行分隔
}