Go Excelize API源碼閱讀GetPageLayout及SetPageMargins
一、Go-Excelize簡(jiǎn)介
Excelize 是 Go 語(yǔ)言編寫(xiě)的用于操作 Office Excel 文檔基礎(chǔ)庫(kù),基于 ECMA-376,ISO/IEC 29500 國(guó)際標(biāo)準(zhǔn)。
- 可以使用它來(lái)讀取、寫(xiě)入由 Microsoft Excel™ 2007 及以上版本創(chuàng)建的電子表格文檔。
- 支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式,高度兼容帶有樣式、圖片(表)、透視表、切片器等復(fù)雜組件的文檔,并提供流式讀寫(xiě) API,用于處理包含大規(guī)模數(shù)據(jù)的工作簿。
- 可應(yīng)用于各類報(bào)表平臺(tái)、云計(jì)算、邊緣計(jì)算等系統(tǒng)。
使用本類庫(kù)要求使用的 Go 語(yǔ)言為 1.15 或更高版本。
二、 GetPageLayout
func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error
根據(jù)給定的工作表名稱和頁(yè)面布局參數(shù)獲取工作表的頁(yè)面布局屬性。
- 通過(guò) PageLayoutOrientation 方法獲取頁(yè)面布局方向
- 通過(guò) 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
廢話少說(shuō),我們來(lái)看一看源碼:
// 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)行操作。
等等...
一如既往的這些操作...
以上就是Go Excelize API源碼閱讀GetPageLayout及SetPageMargins的詳細(xì)內(nèi)容,更多關(guān)于Go Excelize API源碼閱讀的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語(yǔ)法
- gin通過(guò)go build -tags實(shí)現(xiàn)json包切換及庫(kù)分析
- Go語(yǔ)言開(kāi)發(fā)中有了net/http為什么還要有g(shù)in的原理及使用場(chǎng)景解析
- go?gin?正確讀取http?response?body內(nèi)容并多次使用詳解
- Go gin權(quán)限驗(yàn)證實(shí)現(xiàn)過(guò)程詳解
- Go?Ginrest實(shí)現(xiàn)一個(gè)RESTful接口
- Go?Gin框架路由相關(guān)bug分析
相關(guān)文章
go語(yǔ)言在請(qǐng)求http時(shí)加入自定義http header的方法
這篇文章主要介紹了go語(yǔ)言在請(qǐng)求http時(shí)加入自定義http header的方法,實(shí)例分析了Go語(yǔ)言http請(qǐng)求的原理與操作技巧,需要的朋友可以參考下2015-03-03如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件
這篇文章主要介紹了使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁(yè)檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象,我們還展示了如何優(yōu)化用戶體驗(yàn),通過(guò)實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來(lái)改進(jìn)程序,需要的朋友可以參考下2024-03-03Go內(nèi)存分配之結(jié)構(gòu)體優(yōu)化技巧
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言內(nèi)存分配之結(jié)構(gòu)體優(yōu)化技巧的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11Golang中如何使用lua進(jìn)行擴(kuò)展詳解
這篇文章主要給大家介紹了關(guān)于Golang中如何使用lua進(jìn)行擴(kuò)展的相關(guān)資料,這是最近在工作中遇到的一個(gè)問(wèn)題,覺(jué)著有必要分享出來(lái)給大家學(xué)習(xí),文中給出了詳細(xì)的示例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-10-10go mod 安裝依賴 unkown revision問(wèn)題的解決方案
這篇文章主要介紹了go mod 安裝依賴 unkown revision問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05