Ver Fonte

Merge pull request #337 from kkxkkxkkgh/paper-size

The function SetPageLayout support set paper size
xuri há 6 anos atrás
pai
commit
0c5c99e2ad
3 ficheiros alterados com 160 adições e 4 exclusões
  1. 146 3
      sheet.go
  2. 13 0
      sheet_test.go
  3. 1 1
      xmlWorksheet.go

+ 146 - 3
sheet.go

@@ -803,9 +803,13 @@ type PageLayoutOptionPtr interface {
 	getPageLayout(layout *xlsxPageSetUp)
 }
 
-// PageLayoutOrientation defines the orientation of page layout for a
-// worksheet.
-type PageLayoutOrientation string
+type (
+	// PageLayoutOrientation defines the orientation of page layout for a
+	// worksheet.
+	PageLayoutOrientation string
+	// PageLayoutPaperSize defines the paper size of the worksheet
+	PageLayoutPaperSize int
+)
 
 const (
 	// OrientationPortrait indicates page layout orientation id portrait.
@@ -829,10 +833,148 @@ func (o *PageLayoutOrientation) getPageLayout(ps *xlsxPageSetUp) {
 	*o = PageLayoutOrientation(ps.Orientation)
 }
 
+// setPageLayout provides a method to set the paper size for the worksheet.
+func (p PageLayoutPaperSize) setPageLayout(ps *xlsxPageSetUp) {
+	ps.PaperSize = int(p)
+}
+
+// getPageLayout provides a method to get the paper size for the worksheet.
+func (p *PageLayoutPaperSize) getPageLayout(ps *xlsxPageSetUp) {
+	// Excel default: 1
+	if ps == nil || ps.PaperSize == 0 {
+		*p = 1
+		return
+	}
+	*p = PageLayoutPaperSize(ps.PaperSize)
+}
+
 // SetPageLayout provides a function to sets worksheet page layout.
 //
 // Available options:
 //   PageLayoutOrientation(string)
+//	 PageLayoutPaperSize(int)
+//
+// The following shows the paper size sorted by excelize index number:
+//
+//     Index | Paper Size
+//    -------+-----------------------------------------------
+//       1   | Letter paper (8.5 in. by 11 in.)
+//       2   | Letter small paper (8.5 in. by 11 in.)
+//       3   | Tabloid paper (11 in. by 17 in.)
+//       4   | Ledger paper (17 in. by 11 in.)
+//       5   | Legal paper (8.5 in. by 14 in.)
+//       6   | Statement paper (5.5 in. by 8.5 in.)
+//       7   | Executive paper (7.25 in. by 10.5 in.)
+//       8   | A3 paper (297 mm by 420 mm)
+//       9   | A4 paper (210 mm by 297 mm)
+//       10  | A4 small paper (210 mm by 297 mm)
+//       11  | A5 paper (148 mm by 210 mm)
+//       12  | B4 paper (250 mm by 353 mm)
+//       13  | B5 paper (176 mm by 250 mm)
+//       14  | Folio paper (8.5 in. by 13 in.)
+//       15  | Quarto paper (215 mm by 275 mm)
+//       16  | Standard paper (10 in. by 14 in.)
+//       17  | Standard paper (11 in. by 17 in.)
+//       18  | Note paper (8.5 in. by 11 in.)
+//       19  | #9 envelope (3.875 in. by 8.875 in.)
+//       20  | #10 envelope (4.125 in. by 9.5 in.)
+//       21  | #11 envelope (4.5 in. by 10.375 in.)
+//       22  | #12 envelope (4.75 in. by 11 in.)
+//       23  | #14 envelope (5 in. by 11.5 in.)
+//       24  | C paper (17 in. by 22 in.)
+//       25  | D paper (22 in. by 34 in.)
+//       26  | E paper (34 in. by 44 in.)
+//       27  | DL envelope (110 mm by 220 mm)
+//       28  | C5 envelope (162 mm by 229 mm)
+//       29  | C3 envelope (324 mm by 458 mm)
+//       30  | C4 envelope (229 mm by 324 mm)
+//       31  | C6 envelope (114 mm by 162 mm)
+//       32  | C65 envelope (114 mm by 229 mm)
+//       33  | B4 envelope (250 mm by 353 mm)
+//       34  | B5 envelope (176 mm by 250 mm)
+//       35  | B6 envelope (176 mm by 125 mm)
+//       36  | Italy envelope (110 mm by 230 mm)
+//       37  | Monarch envelope (3.875 in. by 7.5 in.).
+//       38  | 6 3/4 envelope (3.625 in. by 6.5 in.)
+//       39  | US standard fanfold (14.875 in. by 11 in.)
+//       40  | German standard fanfold (8.5 in. by 12 in.)
+//       41  | German legal fanfold (8.5 in. by 13 in.)
+//       42  | ISO B4 (250 mm by 353 mm)
+//       43  | Japanese double postcard (200 mm by 148 mm)
+//       44  | Standard paper (9 in. by 11 in.)
+//       45  | Standard paper (10 in. by 11 in.)
+//       46  | Standard paper (15 in. by 11 in.)
+//       47  | Invite envelope (220 mm by 220 mm)
+//       50  | Letter extra paper (9.275 in. by 12 in.)
+//       51  | Legal extra paper (9.275 in. by 15 in.)
+//       52  | Tabloid extra paper (11.69 in. by 18 in.)
+//       53  | A4 extra paper (236 mm by 322 mm)
+//       54  | Letter transverse paper (8.275 in. by 11 in.)
+//       55  | A4 transverse paper (210 mm by 297 mm)
+//       56  | Letter extra transverse paper (9.275 in. by 12 in.)
+//       57  | SuperA/SuperA/A4 paper (227 mm by 356 mm)
+//       58  | SuperB/SuperB/A3 paper (305 mm by 487 mm)
+//       59  | Letter plus paper (8.5 in. by 12.69 in.)
+//       60  | A4 plus paper (210 mm by 330 mm)
+//       61  | A5 transverse paper (148 mm by 210 mm)
+//       62  | JIS B5 transverse paper (182 mm by 257 mm)
+//       63  | A3 extra paper (322 mm by 445 mm)
+//       64  | A5 extra paper (174 mm by 235 mm)
+//       65  | ISO B5 extra paper (201 mm by 276 mm)
+//       66  | A2 paper (420 mm by 594 mm)
+//       67  | A3 transverse paper (297 mm by 420 mm)
+//       68  | A3 extra transverse paper (322 mm by 445 mm)
+//       69  | Japanese Double Postcard (200 mm x 148 mm)
+//       70  | A6 (105 mm x 148 mm)
+//       71  | Japanese Envelope Kaku #2
+//       72  | Japanese Envelope Kaku #3
+//       73  | Japanese Envelope Chou #3
+//       74  | Japanese Envelope Chou #4
+//       75  | Letter Rotated (11in x 8 1/2 11 in)
+//       76  | A3 Rotated (420 mm x 297 mm)
+//       77  | A4 Rotated (297 mm x 210 mm)
+//       78  | A5 Rotated (210 mm x 148 mm)
+//       79  | B4 (JIS) Rotated (364 mm x 257 mm)
+//       80  | B5 (JIS) Rotated (257 mm x 182 mm)
+//       81  | Japanese Postcard Rotated (148 mm x 100 mm)
+//       82  | Double Japanese Postcard Rotated (148 mm x 200 mm)
+//       83  | A6 Rotated (148 mm x 105 mm)
+//       84  | Japanese Envelope Kaku #2 Rotated
+//       85  | Japanese Envelope Kaku #3 Rotated
+//       86  | Japanese Envelope Chou #3 Rotated
+//       87  | Japanese Envelope Chou #4 Rotated
+//       88  | B6 (JIS) (128 mm x 182 mm)
+//       89  | B6 (JIS) Rotated (182 mm x 128 mm)
+//       90  | (12 in x 11 in)
+//       91  | Japanese Envelope You #4
+//       92  | Japanese Envelope You #4 Rotated
+//       93  | PRC 16K (146 mm x 215 mm)
+//       94  | PRC 32K (97 mm x 151 mm)
+//       95  | PRC 32K(Big) (97 mm x 151 mm)
+//       96  | PRC Envelope #1 (102 mm x 165 mm)
+//       97  | PRC Envelope #2 (102 mm x 176 mm)
+//       98  | PRC Envelope #3 (125 mm x 176 mm)
+//       99  | PRC Envelope #4 (110 mm x 208 mm)
+//       100 | PRC Envelope #5 (110 mm x 220 mm)
+//       101 | PRC Envelope #6 (120 mm x 230 mm)
+//       102 | PRC Envelope #7 (160 mm x 230 mm)
+//       103 | PRC Envelope #8 (120 mm x 309 mm)
+//       104 | PRC Envelope #9 (229 mm x 324 mm)
+//       105 | PRC Envelope #10 (324 mm x 458 mm)
+//       106 | PRC 16K Rotated
+//       107 | PRC 32K Rotated
+//       108 | PRC 32K(Big) Rotated
+//       109 | PRC Envelope #1 Rotated (165 mm x 102 mm)
+//       110 | PRC Envelope #2 Rotated (176 mm x 102 mm)
+//       111 | PRC Envelope #3 Rotated (176 mm x 125 mm)
+//       112 | PRC Envelope #4 Rotated (208 mm x 110 mm)
+//       113 | PRC Envelope #5 Rotated (220 mm x 110 mm)
+//       114 | PRC Envelope #6 Rotated (230 mm x 120 mm)
+//       115 | PRC Envelope #7 Rotated (230 mm x 160 mm)
+//       116 | PRC Envelope #8 Rotated (309 mm x 120 mm)
+//       117 | PRC Envelope #9 Rotated (324 mm x 229 mm)
+//       118 | PRC Envelope #10 Rotated (458 mm x 324 mm)
+//
 func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error {
 	s := f.workSheetReader(sheet)
 	ps := s.PageSetUp
@@ -851,6 +993,7 @@ func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error {
 //
 // Available options:
 //   PageLayoutOrientation(string)
+//   PageLayoutPaperSize(int)
 func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error {
 	s := f.workSheetReader(sheet)
 	ps := s.PageSetUp

+ 13 - 0
sheet_test.go

@@ -19,6 +19,12 @@ func ExampleFile_SetPageLayout() {
 	); err != nil {
 		panic(err)
 	}
+	if err := xl.SetPageLayout(
+		"Sheet1",
+		excelize.PageLayoutPaperSize(10),
+	); err != nil {
+		panic(err)
+	}
 	// Output:
 }
 
@@ -27,15 +33,21 @@ func ExampleFile_GetPageLayout() {
 	const sheet = "Sheet1"
 	var (
 		orientation excelize.PageLayoutOrientation
+		paperSize   excelize.PageLayoutPaperSize
 	)
 	if err := xl.GetPageLayout("Sheet1", &orientation); err != nil {
 		panic(err)
 	}
+	if err := xl.GetPageLayout("Sheet1", &paperSize); err != nil {
+		panic(err)
+	}
 	fmt.Println("Defaults:")
 	fmt.Printf("- orientation: %q\n", orientation)
+	fmt.Printf("- paper size: %d\n", paperSize)
 	// Output:
 	// Defaults:
 	// - orientation: "portrait"
+	// - paper size: 1
 }
 
 func TestPageLayoutOption(t *testing.T) {
@@ -46,6 +58,7 @@ func TestPageLayoutOption(t *testing.T) {
 		nonDefault excelize.PageLayoutOption
 	}{
 		{new(excelize.PageLayoutOrientation), excelize.PageLayoutOrientation(excelize.OrientationLandscape)},
+		{new(excelize.PageLayoutPaperSize), excelize.PageLayoutPaperSize(10)},
 	}
 
 	for i, test := range testData {

+ 1 - 1
xmlWorksheet.go

@@ -90,7 +90,7 @@ type xlsxPageSetUp struct {
 	Orientation        string  `xml:"orientation,attr,omitempty"`
 	PageOrder          string  `xml:"pageOrder,attr,omitempty"`
 	PaperHeight        string  `xml:"paperHeight,attr,omitempty"`
-	PaperSize          string  `xml:"paperSize,attr,omitempty"`
+	PaperSize          int     `xml:"paperSize,attr,omitempty"`
 	PaperWidth         string  `xml:"paperWidth,attr,omitempty"`
 	Scale              int     `xml:"scale,attr,omitempty"`
 	UseFirstPageNumber bool    `xml:"useFirstPageNumber,attr,omitempty"`