Skip to content

Commit 7408784

Browse files
authored
Merge pull request #82 from devlights/issue-81
Add PageBreak functions
2 parents 97ebc4a + 2e2d5c3 commit 7408784

File tree

7 files changed

+146
-0
lines changed

7 files changed

+146
-0
lines changed

cell.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,12 @@ func (c *Cell) SetNumberFormatLocal(format constants.NumberFormatLocal) error {
169169

170170
return nil
171171
}
172+
173+
func (c *Cell) PageBreak(pageBreakType constants.XlPageBreak) error {
174+
_, err := oleutil.PutProperty(c.ComObject(), "PageBreak", int(pageBreakType))
175+
if err != nil {
176+
return err
177+
}
178+
179+
return err
180+
}

cell_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,39 @@ import (
99
"github.com/devlights/goxcel/testutil"
1010
)
1111

12+
func TestCell_PageBreak(t *testing.T) {
13+
quit := MustInitGoxcel()
14+
defer quit()
15+
16+
excel, release := MustNewGoxcel()
17+
defer release()
18+
19+
_ = excel.SetVisible(true)
20+
21+
wbs := excel.MustWorkbooks()
22+
wb, wbr := wbs.MustAdd()
23+
defer wbr()
24+
25+
ws := wb.MustSheets(1)
26+
27+
rows := []int{2, 4, 6, 8, 10}
28+
for _, row := range rows {
29+
cell, _ := ws.Cells(row, 5)
30+
31+
err := cell.PageBreak(constants.XlPageBreakManual)
32+
if err != nil {
33+
t.Error(err)
34+
}
35+
36+
cell.MustSetValue("hello")
37+
}
38+
39+
hpb, _ := ws.HPageBreaks()
40+
if count, _ := hpb.Count(); int(count) != len(rows) {
41+
t.Errorf("[want] 5\t[got] %v", count)
42+
}
43+
}
44+
1245
func TestCell_End(t *testing.T) {
1346
f := MustInitGoxcel()
1447
defer f()

constants/xlPageBreak.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package constants
2+
3+
type (
4+
// XlPageBreak は、ワークシートのページブレークの場所を指定します。
5+
XlPageBreak int
6+
)
7+
8+
//goland:noinspection ALL
9+
const (
10+
// Excel が自動的に改ページを追加します。
11+
XlPageBreakAutomatic XlPageBreak = -4105
12+
// 改ページは手動で挿入されます。
13+
XlPageBreakManual XlPageBreak = -4135
14+
// 改ページはワークシートに挿入されません。
15+
XlPageBreakNone XlPageBreak = -4142
16+
)

range.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,13 @@ func (r *XlRange) SetValue(value interface{}) error {
203203
return nil
204204
}
205205

206+
func (r *XlRange) MustSetValue(value any) {
207+
err := r.SetValue(value)
208+
if err != nil {
209+
panic(err)
210+
}
211+
}
212+
206213
func (r *XlRange) SetNumberFormatLocal(format constants.NumberFormatLocal) error {
207214
_, err := oleutil.PutProperty(r.ComObject(), "NumberFormatLocal", string(format))
208215
if err != nil {
@@ -212,6 +219,15 @@ func (r *XlRange) SetNumberFormatLocal(format constants.NumberFormatLocal) error
212219
return nil
213220
}
214221

222+
func (r *XlRange) PageBreak(pageBreakType constants.XlPageBreak) error {
223+
_, err := oleutil.PutProperty(r.ComObject(), "PageBreak", int(pageBreakType))
224+
if err != nil {
225+
return err
226+
}
227+
228+
return nil
229+
}
230+
215231
func (r *XlRange) Walk(walkFn func(r *XlRange, c *Cell, row, col int) error) (*Cell, error) {
216232
rows, err := r.Rows()
217233
if err != nil {

range_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11
package goxcel
22

33
import (
4+
"github.com/devlights/goxcel/constants"
45
"github.com/devlights/goxcel/testutil"
56
"testing"
67
)
78

9+
func TestXlRange_PageBreak(t *testing.T) {
10+
quit := MustInitGoxcel()
11+
defer quit()
12+
13+
excel, release := MustNewGoxcel()
14+
defer release()
15+
16+
wbs := excel.MustWorkbooks()
17+
wb, wbr := wbs.MustAdd()
18+
defer wbr()
19+
20+
ws := wb.MustSheets(1)
21+
22+
rows := []int{2, 4, 6, 8, 10}
23+
for _, row := range rows {
24+
ra, _ := ws.Range(row, 5, row, 5)
25+
26+
err := ra.PageBreak(constants.XlPageBreakManual)
27+
if err != nil {
28+
t.Error(err)
29+
}
30+
31+
ra.MustSetValue("hello")
32+
}
33+
34+
hpb, _ := ws.HPageBreaks()
35+
if count, _ := hpb.Count(); int(count) != len(rows) {
36+
t.Errorf("[want] 5\t[got] %v", count)
37+
}
38+
}
39+
840
func TestXlRange_Count(t *testing.T) {
941
testutil.Interval()
1042
defer testutil.Interval()

worksheet.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,15 @@ func (ws *Worksheet) VPageBreaks() (*VPageBreaks, error) {
257257
return vpbs, nil
258258
}
259259

260+
func (ws *Worksheet) ResetAllPageBreaks() error {
261+
_, err := oleutil.CallMethod(ws.ComObject(), "ResetAllPageBreaks")
262+
if err != nil {
263+
return err
264+
}
265+
266+
return nil
267+
}
268+
260269
func (ws *Worksheet) Shapes() (*Shapes, error) {
261270
v, err := oleutil.GetProperty(ws.ComObject(), "Shapes")
262271
if err != nil {

worksheet_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,37 @@ import (
1010
"github.com/devlights/goxcel/testutil"
1111
)
1212

13+
func TestWorksheet_ResetAllPageBreaks(t *testing.T) {
14+
quit := MustInitGoxcel()
15+
defer quit()
16+
17+
excel, release := MustNewGoxcel()
18+
defer release()
19+
20+
wbs := excel.MustWorkbooks()
21+
wb, wbr := wbs.MustAdd()
22+
defer wbr()
23+
24+
ws := wb.MustSheets(1)
25+
26+
cell := ws.MustCells(10, 5)
27+
cell.MustSetValue("hello")
28+
_ = cell.PageBreak(constants.XlPageBreakManual)
29+
30+
vpb, _ := ws.VPageBreaks()
31+
if count, _ := vpb.Count(); count != 1 {
32+
t.Errorf("[want] 1\t[got] %v", count)
33+
}
34+
35+
if err := ws.ResetAllPageBreaks(); err != nil {
36+
t.Error(err)
37+
}
38+
39+
if count, _ := vpb.Count(); count != 0 {
40+
t.Errorf("[want] 0\t[got] %v", count)
41+
}
42+
}
43+
1344
func TestWorksheet_UsedRange(t *testing.T) {
1445
f := MustInitGoxcel()
1546
defer f()

0 commit comments

Comments
 (0)