最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go Excelize API源碼閱讀GetPageLayout及SetPageMargins

 更新時(shí)間:2022年08月18日 15:15:26   作者:丘山子  
這篇文章主要為大家介紹了Go Excelize API源碼閱讀GetPageLayout及SetPageMargins的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、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ù)類型
PageMarginBotomfloat64
PageMarginFooterfloat64
PageMarginHeaderfloat64
PageMarginLeftfloat64
PageMarginRightfloat64
PageMarginTopfloat64

例如,設(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)文章!

相關(guān)文章

  • 一文詳解Golang中consul的基本使用

    一文詳解Golang中consul的基本使用

    consul是一個(gè)開源服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)的中心,可以用于微服務(wù)的注冊(cè)和服務(wù)之間的調(diào)用的發(fā)現(xiàn),幫助上游服務(wù)找到下游服務(wù)的具體ip:port或者是domain,也可以使用dns的方式讓consul幫你去做轉(zhuǎn)發(fā)。本文就來(lái)講講它的具體使用吧
    2023-03-03
  • Golang中 Slice的分析與使用源碼解析

    Golang中 Slice的分析與使用源碼解析

    這篇文章主要介紹了Golang 中 Slice的分析與使用(含源碼),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Golang中的int類型和uint類型到底有多大?

    Golang中的int類型和uint類型到底有多大?

    int和uint類型在我們?nèi)粘i_發(fā)中經(jīng)常會(huì)用到,但有個(gè)疑問(wèn)就是這兩個(gè)類型有多大,通過(guò)各種嘗試最終得到了答案,所以下面這篇文章主要給大家介紹了關(guān)于Golang中的int類型和uint類型到底有多大的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • go語(yǔ)言LeetCode題解720詞典中最長(zhǎng)的單詞

    go語(yǔ)言LeetCode題解720詞典中最長(zhǎng)的單詞

    這篇文章主要為大家介紹了go語(yǔ)言LeetCode題解720詞典中最長(zhǎng)的單詞,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang打印復(fù)雜結(jié)構(gòu)體兩種方法詳解

    Golang打印復(fù)雜結(jié)構(gòu)體兩種方法詳解

    在?Golang?語(yǔ)言開發(fā)中,我們經(jīng)常會(huì)使用結(jié)構(gòu)體類型,如果我們使用的結(jié)構(gòu)體類型的變量包含指針類型的字段,我們?cè)谟涗浫罩镜臅r(shí)候,指針類型的字段的值是指針地址,將會(huì)給我們?debug?代碼造成不便
    2022-10-10
  • 三種Golang數(shù)組拷貝的實(shí)現(xiàn)方式與性能分析

    三種Golang數(shù)組拷貝的實(shí)現(xiàn)方式與性能分析

    在?Golang?中,有多種方式可以進(jìn)行數(shù)組的拷貝,本文將對(duì)其中的三種方式進(jìn)行性能分析,并比較它們的優(yōu)缺點(diǎn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • go mod包拉不下來(lái)的問(wèn)題及解決方案

    go mod包拉不下來(lái)的問(wèn)題及解決方案

    這篇文章主要介紹了go mod包拉不下來(lái)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go實(shí)現(xiàn)map轉(zhuǎn)json的示例詳解

    Go實(shí)現(xiàn)map轉(zhuǎn)json的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)map轉(zhuǎn)json的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • Golang單元測(cè)試與斷言編寫流程詳解

    Golang單元測(cè)試與斷言編寫流程詳解

    這篇文章主要介紹了Golang單元測(cè)試與斷言編寫流程,單元測(cè)試也是一個(gè)很重要的事情。單元測(cè)試是指在開發(fā)中,對(duì)一個(gè)函數(shù)或模塊的測(cè)試。其強(qiáng)調(diào)的是對(duì)單元進(jìn)行測(cè)試
    2022-12-12
  • Golang?Mutex互斥鎖源碼分析

    Golang?Mutex互斥鎖源碼分析

    本篇文章,我們將一起來(lái)探究下Golang?Mutex底層是如何實(shí)現(xiàn)的,知其然,更要知其所以然。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-10-10

最新評(píng)論

西安市| 曲阜市| 长寿区| 化德县| 高密市| 普宁市| 随州市| 油尖旺区| 明溪县| 靖江市| 东辽县| 太湖县| 连云港市| 阿尔山市| 法库县| 山东| 宜州市| 长垣县| 诸暨市| 栾城县| 通河县| 古浪县| 凯里市| 菏泽市| 竹北市| 襄垣县| 山丹县| 平顶山市| 彰武县| 藁城市| 县级市| 博兴县| 类乌齐县| 高州市| 苏尼特左旗| 清苑县| 眉山市| 绥棱县| 巴中市| 迁西县| 潍坊市|