首頁 > 軟體

Go Excelize API原始碼閱讀GetPageLayout及SetPageMargins

2022-08-18 18:01:42

一、Go-Excelize簡介

Excelize 是 Go 語言編寫的用於操作 Office Excel 檔案基礎庫,基於 ECMA-376,ISO/IEC 29500 國際標準。

  • 可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本建立的電子試算表檔案。
  • 支援 XLAM / XLSM / XLSX / XLTM / XLTX 等多種檔案格式,高度相容帶有樣式、圖片(表)、透視表、切片器等複雜元件的檔案,並提供流式讀寫 API,用於處理包含大規模資料的工作簿。
  • 可應用於各類報表平臺、雲端計算、邊緣計算等系統。

使用本類庫要求使用的 Go 語言為 1.15 或更高版本。

二、 GetPageLayout

func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error

根據給定的工作表名稱和頁面佈局引數獲取工作表的頁面佈局屬性。

  • 通過 PageLayoutOrientation 方法獲取頁面佈局方向
  • 通過 PageLayoutPaperSize 方法獲取頁面紙張大小 例如,獲取名為 Sheet1 的工作表頁面佈局設定:
f := excelize.NewFile()
const sheet = "Sheet1"
var (
    orientation excelize.PageLayoutOrientation
    paperSize   excelize.PageLayoutPaperSize
)
if err := f.GetPageLayout("Sheet1", &orientation); err != nil {
    fmt.Println(err)
}
if err := f.GetPageLayout("Sheet1", &paperSize); err != nil {
    fmt.Println(err)
}
fmt.Println("Defaults:")
fmt.Printf("- orientation: %qn", orientation)
fmt.Printf("- paper size: %dn", paperSize)

輸出結果如下:

Defaults:
- orientation: "portrait"
- paper size: 1

廢話少說,我們來看一看原始碼:

// GetPageLayout provides a function to gets worksheet page layout.
//
// Available options:
//   PageLayoutOrientation(string)
//   PageLayoutPaperSize(int)
//   FitToHeight(int)
//   FitToWidth(int)
func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error {
	s, err := f.workSheetReader(sheet)
	if err != nil {
		return err
	}
	ps := s.PageSetUp
	for _, opt := range opts {
		opt.getPageLayout(ps)
	}
	return err
}

選項引數有4個,分別是PageLayoutOrientation(string)、PageLayoutPaperSize(int)、FitToHeight(int)、FitToWidth(int)。 原始碼邏輯很簡單,讀取工作表,然後獲取工作表的PageSetUp欄位,它是*xlsxPageSetUp型別的。

下圖是xlsxPageSetUp型別的具體情況。可以看到它具有這麼多結構體成員變數。

然後是遍歷不定長變數opts,對於每個引數執行對應的操作。

....

如此,對每個引數都執行相應的方法之後,我們就將獲取到的值存在了引數之中,因為從頭到尾都是對引數的指標進行操作。

三、SetPageMargins

func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error

根據給定的工作表名稱和頁邊距引數設定工作表的頁邊距。頁邊距可選引數:

引數資料型別
PageMarginBotomfloat64
PageMarginFooterfloat64
PageMarginHeaderfloat64
PageMarginLeftfloat64
PageMarginRightfloat64
PageMarginTopfloat64

例如,設定名為 Sheet1 的工作表頁邊距:

f := excelize.NewFile()
const sheet = "Sheet1"
if err := f.SetPageMargins(sheet,
    excelize.PageMarginBottom(1.0),
    excelize.PageMarginFooter(1.0),
    excelize.PageMarginHeader(1.0),
    excelize.PageMarginLeft(1.0),
    excelize.PageMarginRight(1.0),
    excelize.PageMarginTop(1.0),
); err != nil {
    fmt.Println(err)
}

該API原始碼如下:

// SetPageMargins provides a function to set worksheet page margins.
//
// Available options:
//   PageMarginBottom(float64)
//   PageMarginFooter(float64)
//   PageMarginHeader(float64)
//   PageMarginLeft(float64)
//   PageMarginRight(float64)
//   PageMarginTop(float64)
func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error {
	s, err := f.workSheetReader(sheet)
	if err != nil {
		return err
	}
	pm := s.PageMargins
	if pm == nil {
		pm = new(xlsxPageMargins)
		s.PageMargins = pm
	}
	for _, opt := range opts {
		opt.setPageMargins(pm)
	}
	return err
}

先讀取工作表,然後獲取PageMargins欄位。

如果這個欄位為空,就新建一個xlsxPageMargins物件,給s.PageMargins。

	for _, opt := range opts {
		opt.setPageMargins(pm)
	}

然後對根據opt的型別,對pm指標進行操作。

等等...

一如既往的這些操作...

以上就是Go Excelize API原始碼閱讀GetPageLayout及SetPageMargins的詳細內容,更多關於Go Excelize API原始碼閱讀的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com