Golang操作excel的方法

2022-09-24 10:57:14 字數 3824 閱讀 9682

關鍵術語介紹

為了方便開源庫的快速上手,我們先來了解 excel 中的幾個關鍵術語,如下圖所示,①為sheet,也就是**中的頁籤;②為row,代表 excel 中的一行;③為cell,代表 excel 中的乙個單元格。

正常情況下,建立乙個**的基本流程是開啟 wps 點選新建,這時會預設建立乙個 sheet,然www.cppcns.com後在該 sheet 中的第一行填寫表頭,接下來根據表頭逐行填充內容,最後將檔案另存為到硬碟的某個位置。這與 golang 開源庫建立 excel 的流程基本相同,下面演示乙個極簡**的建立。

建立**

建立**前需要先引入 excel 庫,我們以比較熱門的 tealeg/xlsx 庫為例。

首先建立乙個空檔案,拿到檔案控制代碼。

file := xlsx.newfile()

建立乙個名為人員資訊收集的 sheet。

sheet, err := file.addsheet("人員資訊收集")

if err != nil

然後為該 sheet 建立一行,這行作為我們的表頭。

row := sheet.addrow()

在該行中建立乙個單元格。

cell := row.addcell()

現在給單元格填充內容,因為是表頭,暫且叫姓名。

cell.value = "姓名"

如何建立第二個單元格呢?原理相同,此處 cell 變數已定義,再建立新單元格只需賦值即可。

cell = row.addcell()

cell.value = "性別"

表頭已經設定好了,可以開始建立第二行來填充內容了,方式與上述無差別。

row = sheet.addrow()

cell = row.addcell()

cell.value = "張三"

cell = row.addcell()

cell.value = "男"

**設定完成後,將該檔案儲存,檔名可自定義。

err = file.s**e("demo.xlsx")

if err != nil

跑起來後,可以發現目錄中多了乙個 demo.xlsx 檔案,開啟預覽內容如下,達到了預期效果。

檔案原始碼

cell.value = "姓名"

cell = row.addcell()

cewww.cppcns.comll.value = "性別"

row = sheet.addrow()

cell = row.addcell()

cell.value = "張三"

cell = row.addcell()

cell.value = "男"

err = file.s**e("demo.xlsx")

if err != nil

}讀取**

**的讀取比建立簡單很多,依然以上文建立的檔案為例。

output, err := xlsx.filetoslice("demo.xlsx")

if err != nil

只需將檔案路徑傳入上述方法,即可自動讀取並返回乙個三維切片,我們來讀取第乙個 sheet 的第二行中的第乙個單元格。

log.println(output[0][1][1]) //output: 男

由此一來就非常容易遍歷了。

for rowindex, row := range output[0]

}2020/10/11 16:15:29 第1行,第1個單元格:姓名

2020/10/11 16:15:29 第1行,第2個單元格:性別

2020/10/11 16:15:29 第2行,第1個單元格:張三

2020/10/11 16:15:29 第2行,第2個單元格:男

檔案原始碼

}}修改**

只是讀取**內容可能在特定場景下無法滿足需求,有時候需要對**內容進行更改。

file, err := xlsx.openfile("demo.xlsx")

if err != nil

修改**之前依然需要先讀取檔案,只是這次並沒有直接將其轉化為三維切片。拿到檔案控制代碼後,可以直接修改某一行的內容。

file.sheets[0].rows[1].cells[0].value = "李四"

上述**將第二行的張三改為了李四,但這還沒有結束,接下來需要將檔案重新儲存。

err = file.s**e("demo.xlsx")

if err != nil

開啟檔案預覽,可以看到已經成功將張三改為了李四。

檔案原始碼

file.sheets[0].rows[1].cells[0].value = "李四"

err = file.s**e("demo.xlsx")

if err != nil

}樣式設定

該開源庫不僅支援內容的編輯,還支援**的樣式設定,樣式統一由結構體 style 來負責。

type style struct

拿上述生成的檔案為例,假如我要將姓名所在單元格居中,首先要例項化樣式物件。

style := xlsx.newstyle()

賦值居中屬性。

style.alignment = xlsx.alignment

給第一行第乙個單元格設定樣式。

file.sheets[0].rows[0].cells[0].setstyle(style)

與修改**處理邏輯相同,最後儲存檔案。

err = file.s**e("demo.xlsx")

if err != nil

開啟預覽,可以看到文字已經上下左右居中。

同理,可以修改文字顏色和背景,同樣通過 style 的屬性來設定。

style.font.color = xlsx.rgb_dark_red

style.fill.bgcolor = xlsx.rgb_dark_green

其他還有很多屬性可以設定,比如合併單元格、字型、大小等等,大家可以自行測試。

檔案原始碼

style := xlsx.newstyle()

style.font.color = xlsx.rgb_dark_red

style.fill.bgcolor = xlsx.rgb_dark_green

style.alignment = xlsx.alignment

file.sheets[0].rows[0].cells[0].setstyle(style)

err = file.s**e("demo.xlsx")

if err != nil

}我是平也,這有乙個專注gopher技術成長的開源專案「go home」

Golang對excel進行處理

國慶節祝我們的祖國更加繁榮昌盛,想必大家在國慶期間也好好放鬆了一下,中秋節過節停更了一次,家裡面有孩子了,放假期間希望能好好陪陪孩子,請大家諒解。今天發一篇技術文章,幫助大家逐漸回歸到正常的工作狀態。go get github.com tealeg xlsx我們通過乙個簡單的例子看看這個包如何使用,...

excel操作 讀取excel

讀取excel步驟 匯入xlrd模組 開啟excel 讀取需要的sheet頁 通過sheet頁編號或者sheet名字 獲取該sheet頁每行每個字段結果 import xlrd book xlrd.open workbook students.xls 開啟excel sheet book.sheet...

golang 檔案操作

檔案開啟模式 const o rdonly int syscall.o rdonly 唯讀模式開啟檔案 o wronly int syscall.o wronly 只寫模式開啟檔案 o rdwr int syscall.o rdwr 讀寫模式開啟檔案 o create int syscall.o c...