日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語言 正文

Go?Excelize?API源碼閱讀GetPageLayout及SetPageMargins_Golang

作者:丘山子 ? 更新時(shí)間: 2022-10-15 編程語言

一、Go-Excelize簡(jiǎn)介

Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎(chǔ)庫(kù),基于 ECMA-376,ISO/IEC 29500 國(guó)際標(biāo)準(zhǔn)。

  • 可以使用它來讀取、寫入由 Microsoft Excel? 2007 及以上版本創(chuàng)建的電子表格文檔。
  • 支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式,高度兼容帶有樣式、圖片(表)、透視表、切片器等復(fù)雜組件的文檔,并提供流式讀寫 API,用于處理包含大規(guī)模數(shù)據(jù)的工作簿。
  • 可應(yīng)用于各類報(bào)表平臺(tái)、云計(jì)算、邊緣計(jì)算等系統(tǒng)。

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

二、 GetPageLayout

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

根據(jù)給定的工作表名稱和頁(yè)面布局參數(shù)獲取工作表的頁(yè)面布局屬性。

  • 通過 PageLayoutOrientation 方法獲取頁(yè)面布局方向
  • 通過 PageLayoutPaperSize 方法獲取頁(yè)面紙張大小 例如,獲取名為 Sheet1 的工作表頁(yè)面布局設(shè)置:
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)

輸出結(jié)果如下:

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
}

選項(xiàng)參數(shù)有4個(gè),分別是PageLayoutOrientation(string)、PageLayoutPaperSize(int)、FitToHeight(int)、FitToWidth(int)。 源碼邏輯很簡(jiǎn)單,讀取工作表,然后獲取工作表的PageSetUp字段,它是*xlsxPageSetUp類型的。

下圖是xlsxPageSetUp類型的具體情況。可以看到它具有這么多結(jié)構(gòu)體成員變量。

然后是遍歷不定長(zhǎng)變量opts,對(duì)于每個(gè)參數(shù)執(zhí)行對(duì)應(yīng)的操作。

....

如此,對(duì)每個(gè)參數(shù)都執(zhí)行相應(yīng)的方法之后,我們就將獲取到的值存在了參數(shù)之中,因?yàn)閺念^到尾都是對(duì)參數(shù)的指針進(jìn)行操作。

三、SetPageMargins

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

根據(jù)給定的工作表名稱和頁(yè)邊距參數(shù)設(shè)置工作表的頁(yè)邊距。頁(yè)邊距可選參數(shù):

參數(shù) 數(shù)據(jù)類型
PageMarginBotom float64
PageMarginFooter float64
PageMarginHeader float64
PageMarginLeft float64
PageMarginRight float64
PageMarginTop float64

例如,設(shè)置名為 Sheet1 的工作表頁(yè)邊距:

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字段。

如果這個(gè)字段為空,就新建一個(gè)xlsxPageMargins對(duì)象,給s.PageMargins。

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

然后對(duì)根據(jù)opt的類型,對(duì)pm指針進(jìn)行操作。

等等...

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

原文鏈接:https://juejin.cn/post/7133030073887621156

欄目分類
最近更新