Go Excelize API源碼閱讀GetPageLayout及SetPageMargins

一、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: %q\n", orientation)
fmt.Printf("- paper size: %d\n", 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

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

參數 數據類型
PageMarginBotom float64
PageMarginFooter float64
PageMarginHeader float64
PageMarginLeft float64
PageMarginRight float64
PageMarginTop float64

例如,設置名為 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源碼閱讀的資料請關註WalkonNet其它相關文章!

推薦閱讀: