Go Excelize API源碼閱讀GetPageLayout及SetPageMargins
一、Go-Excelize簡(jiǎn)介
Excelize 是 Go 語(yǔ)言編寫的用于操作 Office Excel 文檔基礎(chǔ)庫(kù),基于 ECMA-376,ISO/IEC 29500 國(guó)際標(biāo)準(zhǔn)。
- 可以使用它來(lái)讀取、寫入由 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 語(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-03
Go內(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-11
Golang中如何使用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-10
go mod 安裝依賴 unkown revision問(wèn)題的解決方案
這篇文章主要介紹了go mod 安裝依賴 unkown revision問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05

