Go 語言使用 excelize 庫操作 Excel 的方法

在筆者開發的項目中,有操作excel的需要,由于go操作excel比較方便且功能強大,于是選擇使用go來操作excel。github.com/360EntSecGroup-Skylar/excelize庫是一個功能強大且易于使用的庫,它支持創建、讀取和修改 Excel 文件,兼容多種 Excel 版本格式。接下來,將詳細介紹如何使用該庫進行 Excel 文件的讀寫操作。?

一、安裝 excelize 庫?

使用go get命令安裝excelize庫,在終端中執行以下命令:?

go get github.com/360EntSecGroup-Skylar/excelize?

安裝完成后,在 Go 代碼中導入該庫:?

import (?"github.com/360EntSecGroup-Skylar/excelize"?)?

?

二、創建并寫入 Excel 文件?

1. 基本寫入操作?

下面的示例代碼展示了如何使用excelize庫創建一個新的 Excel 文件,并向其中寫入數據:?

?

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {// 創建一個新的Excel文件f := excelize.NewFile()// 創建一個新的工作表index := f.NewSheet("Sheet1")// 設置單元格的值f.SetCellValue("Sheet1", "A1", "姓名")f.SetCellValue("Sheet1", "B1", "年齡")f.SetCellValue("Sheet1", "A2", "小明")f.SetCellValue("Sheet1", "B2", 20)// 設置默認工作表f.SetActiveSheet(index)// 保存文件if err := f.SaveAs("example.xlsx"); err != nil {println(err.Error())}
}

在上述代碼中:?

  • 首先通過excelize.NewFile()創建一個新的 Excel 文件對象。?
  • 接著使用NewSheet方法創建名為 “Sheet1” 的工作表,并獲取其索引。?
  • 然后通過SetCellValue方法設置指定單元格的值,參數依次為工作表名稱、單元格坐標和要設置的值。?
  • 再使用SetActiveSheet方法將創建的工作表設置為默認工作表。?
  • 最后調用SaveAs方法將文件保存到指定路徑。?

2. 批量寫入數據?

如果需要批量寫入數據,可以使用循環結合SetCellValue方法實現。例如,將一個切片中的數據寫入 Excel:?

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")data := [][]interface{}{{"姓名", "年齡"},{"小紅", 22},{"小剛", 23},}for rowIndex, rowData := range data {for colIndex, cellData := range rowData {cell, err := excelize.CoordinatesToCellName(colIndex+1, rowIndex+1)if err != nil {println(err.Error())return}f.SetCellValue("Sheet1", cell, cellData)}}f.SetActiveSheet(index)if err := f.SaveAs("batch_example.xlsx"); err != nil {println(err.Error())}
}

?

這里先定義了一個二維切片存儲數據,通過兩層循環遍歷切片,使用CoordinatesToCellName方法將行列索引轉換為單元格坐標,再設置單元格值。?

三、讀取 Excel 文件?

1. 讀取指定單元格數據?

以下示例展示了如何讀取 Excel 文件中指定單元格的數據:?

?

package mainimport ("fmt""github.com/360EntSecGroup-Skylar/excelize"
)func main() {f, err := excelize.OpenFile("example.xlsx")if err != nil {fmt.Println(err.Error())return}defer f.Close()// 獲取Sheet1工作表中A1單元格的值cell, err := f.GetCellValue("Sheet1", "A1")if err != nil {fmt.Println(err.Error())return}fmt.Println(cell)
}

代碼中,先使用OpenFile方法打開 Excel 文件,成功打開后,通過GetCellValue方法獲取指定工作表和單元格的內容,最后記得關閉文件。?

2. 遍歷讀取工作表數據?

若要遍歷讀取整個工作表的數據,可以通過循環實現:?

?

package mainimport ("fmt""github.com/360EntSecGroup-Skylar/excelize"
)func main() {f, err := excelize.OpenFile("example.xlsx")if err != nil {fmt.Println(err.Error())return}defer f.Close()// 獲取Sheet1工作表sheet := "Sheet1"rows, err := f.GetRows(sheet)if err != nil {fmt.Println(err.Error())return}for _, row := range rows {for _, cell := range row {fmt.Printf("%s\t", cell)}fmt.Println()}
}

上述代碼使用GetRows方法獲取指定工作表的所有行數據,返回一個二維字符串切片,通過兩層循環遍歷切片,打印出每個單元格的值。?

四、設置單元格樣式?

excelize庫還支持設置單元格樣式,如字體、顏色、對齊方式等。以下是一個設置單元格字體加粗、背景色為黃色的示例:?

?

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")f.SetCellValue("Sheet1", "A1", "標題")// 創建樣式style, err := f.NewStyle(`{"font":{"bold":true},"fill":{"type":"pattern","color":["#FFFF00"],"pattern":1}}`)if err != nil {println(err.Error())return}// 應用樣式到單元格if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {println(err.Error())return}f.SetActiveSheet(index)if err := f.SaveAs("style_example.xlsx"); err != nil {println(err.Error())}
}

在這個例子中,先通過NewStyle方法創建一個樣式對象,傳入 JSON 格式的樣式配置,定義字體加粗和背景色。然后使用SetCellStyle方法將樣式應用到指定的單元格區域。?

五、使用公式?

excelize庫支持在 Excel 文件中使用公式。例如,在單元格中設置求和公式:?

?

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")f.SetCellValue("Sheet1", "A1", 10)f.SetCellValue("Sheet1", "A2", 20)// 設置公式f.SetCellFormula("Sheet1", "A3", "SUM(A1:A2)")f.SetActiveSheet(index)if err := f.SaveAs("formula_example.xlsx"); err != nil {println(err.Error())}
}

通過SetCellFormula方法,指定工作表、單元格和公式內容,即可在 Excel 文件中使用公式進行計算。?

掌握excelize庫的這些用法,在 Go 語言中處理 Excel 文件將變得更加輕松高效。無論是簡單的數據讀寫,還是復雜的樣式設置與公式應用,都能滿足實際開發需求。在實際應用中,你還可以根據具體場景進一步探索和使用該庫的更多功能。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910470.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎(三):邏輯運算符詳解

Java基礎系列文章 Java基礎(一):發展史、技術體系與JDK環境配置詳解 Java基礎(二):八種基本數據類型詳解 Java基礎(三):邏輯運算符詳解 目錄 一、什么是邏輯運算符?二、基礎邏輯運算符(3種)1、&&…

Bugku-CTF-web

最近刷了一下 Bugku-CTF-web 的61-70題(平臺目前只有67),好難好難,全都是知識的盲區。各種代碼審計,各種反序列化,各種反彈shell,各種模版注入,各種字符串繞過,可以說是W…

GitLab 工具如何提升我的工作效率

在當今快節奏的軟件開發和技術創作領域,作為一名博主,高效的工作流程和強大的協作工具至關重要。GitLab 作為一款集成了版本控制、項目管理、持續集成與持續部署(CI/CD)等功能于一體的平臺,為我的工作帶來了巨大的便利…

Unity Addressable使用之服務器遠程加載

本地模擬服務器加載 1、創建一個Profiles,將Remote設為Editor Hosted 2、在Addressables Group窗口將Profile設為Local Test 3、將某個Asset Groups設為Remote加載 4、Build資源 5、打開本地模擬服務器 Addressables Hosting 窗口是 Addressable 提供的一個內置本…

Java基礎八股文 - 面試者心理歷程與標準答案

Java基礎八股文 - 面試者心理歷程與標準答案 前言:如何應對Java基礎面試問題 面試Java基礎時,很多候選人會因為緊張而忘記平時熟悉的知識點。本文將從面試者的心理歷程出發,教你如何在面試中用自己的思路組織答案,然后給出標準回…

學習筆記088——Windows配置Tomcat自啟

1、下載 下載Windows版本tomcat。本文下載的版本是: apache-tomcat-9.0.31-windows-x64.zip 點擊下載 注意:要確保bin目錄下有 service.bat 文件! 2、配置服務 解壓后,終端進入bin?錄,安裝服務:service…

SSL證書怎么配置到服務器上 ?

在網絡安全備受關注的當下,SSL證書已成為網站安全的標配。但僅有SSL證書還不夠,正確將其配置到服務器上,才能真正發揮保障數據傳輸安全、驗證網站身份的作用。由于服務器類型多樣,不同服務器的SSL證書配置方法存在差異&#xff0c…

AI與SEO關鍵詞協同進化

內容概要 人工智能(AI)與搜索引擎優化(SEO)的結合,正深刻變革著關鍵詞策略的制定與執行方式。本文旨在探討AI技術如何驅動SEO關鍵詞領域的智能化進化,核心在于利用AI強大的數據處理與模式識別能力&#xf…

01.線性代數是如何將復雜的數據結構轉化為可計算的數學問題,這個過程是如何進行的

將復雜數據結構轉化為可計算的數學問題是數據科學、機器學習和算法設計中的核心環節。這一過程需要結合數據特性、數學理論和計算框架,通過系統化的抽象和建模實現。以下是具體轉化流程及關鍵技術解析: 一、數據結構分析:解構原始數據的本質特征 1. 識別數據類型與結構特性…

華為OD機考-網上商城優惠活動-模擬(JAVA 2025B卷)

import java.util.Scanner;public class Test3 {static int mjq;static int dzq;static int wmkq;static class Group {int price;// 打折后價格int num;// 優惠券使用熟練}public static void main(String[] args) {Scanner scanner new Scanner(System.in);String input sc…

JavaScript 數據處理 - 將字符串按指定位數截斷并放入數組(基礎實現、使用正則表達式實現、使用正則表達式簡化實現)

將字符串按指定位數截斷并放入數組 1、基礎實現 /*** 將字符串按指定位數截斷并放入數組* param {string} str - 要處理的字符串* param {number} n - 每段截斷的位數* returns {Array} 截斷后的字符串數組*/ function splitStringByLength(str, n) {const result [];for (l…

python學智能算法(十四)|機器學習樸素貝葉斯方法進階-CountVectorizer文本處理簡單測試

【1】引用 前序學習文章中,已經對拉普拉斯平滑和簡單二元分類進行了初步探索,相關文章鏈接為: python學智能算法(十二)|機器學習樸素貝葉斯方法初步-拉普拉斯平滑計算條件概率-CSDN博客 python學智能算法&#xff0…

Java枚舉類的規范設計與常見錯誤規避

前言 在Java開發中,枚舉(enum)是一種強大的工具,用于定義一組固定常量集合。然而,許多開發者在使用枚舉時容易陷入設計誤區,導致代碼可維護性差、運行時錯誤頻發,甚至引發生產事故。 一、枚舉…

Vue指令v-if

目錄 一、Vue中的v-if指令是什么?二、v-if指令的使用 一、Vue中的v-if指令是什么? v-if指令是根據表達值的真假,切換元素的顯示和隱藏, 本質是通過操縱dom元素來切換顯示狀態。 注意: 表達式的值為true,元…

探秘阿里云云數據庫Tair:性能、特性與應用全景解析

引言 在數字化浪潮席卷全球的當下,數據已然成為企業最為關鍵的資產之一,如何高效管理和運用這些數據,成為了企業在激烈競爭中脫穎而出的關鍵。云數據庫作為現代數據管理的核心工具,憑借其卓越的可擴展性、靈活性以及高效的數據處…

百度大模型免費上線,學AI大模型就選近嶼智能

3月16日,文心大模型4.5和文心大模型X1正式發布!目前兩款模型已免費對用戶開放。 文心大模型4.5是百度自主研發的新一代原生多模態基礎大模型,通過多個模態聯合建模實現協同優化,提高多模態理解能力,精進語言能力&#…

PostgreSQL 中實現跨庫連接主要有兩種解決方案

方法一:使用 dblink 擴展 dblink 是 PostgreSQL 的內置擴展,允許在一個數據庫會話中執行遠程 SQL 查詢。 步驟 1:在源數據庫中啟用 dblink 擴展 CREATE EXTENSION IF NOT EXISTS dblink;步驟 2:執行跨庫查詢 -- 簡單查詢示例&…

Qt中的布局

Qt6.8的布局管理系統,用于自動排列部件:水平布局QHBoxLayout、垂直布局QVBoxLayout、網格布局QGridLayout、表單布局QFormLayout 布局(layout)是一種優雅而靈活的方式,可以在其容器內自動排列子部件(child widgets)。每個部件通過sizeHint和s…

Agent成本降低46%:緩存規劃器的思路模板

論文標題 Cost-Efficient Serving of LLM Agents via Test-Time Plan Caching 論文地址 https://arxiv.org/pdf/2506.14852 作者背景 斯坦福大學 動機 大模型能力的飛速進步催收了大量 AI 智能體應用,它們協調多種模型、工具、工作流來解決實際復雜任務。然而…

Vue 3 + Axios 完整入門實戰指南

從入門到深入,手把手教你在 Vue 3 中正確使用 Axios,支持全局掛載、局部分離、使用 proxy 連接場景,適合所有前端小白和實戰設計。 大家好,我是石小石!一個熱愛技術分享的開源社區貢獻者,小冊《油猴腳本實戰…