golang操作excel的高性能庫——excelize/v2

目錄

  • 介紹
  • 文檔與源碼
  • 安裝
  • 快速開始
    • 創建 Excel 文檔
    • 讀取 Excel 文檔
    • 打開數據流
    • 流式寫入
  • [相關 Excel 開源類庫性能對比](https://xuri.me/excelize/zh-hans/performance.html)

介紹

Excelize是一個純Go編寫的庫,提供了一組功能,允許你向XLAM / XLSM / XLSX / XLTM / XLTX文件寫入和讀取。支持讀取和寫入由Microsoft Excel? 2007及更高版本生成的電子表格文檔。通過高度兼容性支持復雜組件,并提供了流式API,用于生成或從包含大量數據的工作表中讀取數據。此庫需要Go版本1.16或更高版本。可以使用Go的內置文檔工具查看完整文檔,也可以在go.dev和文檔引用中在線查閱。

另外還有另外一個庫:github.com/360EntSecGroup-Skylar/excelize/v2,不過它已經沒了,或者說它和github.com/xuri/excelize/v2是一個東西,用法功能都完全一樣。。。。

文檔與源碼

Github源碼:https://github.com/qax-os/excelize

中文文檔:https://xuri.me/excelize/zh-hans/

安裝

go get github.com/xuri/excelize/v2

快速開始

創建 Excel 文檔

package mainimport ("fmt""github.com/xuri/excelize/v2"
)func main() {f := excelize.NewFile()defer func() {if err := f.Close(); err != nil {fmt.Println(err)}}()// 創建一個工作表index, err := f.NewSheet("Sheet2")if err != nil {fmt.Println(err)return}// 設置單元格的值f.SetCellValue("Sheet2", "A2", "Hello world.")f.SetCellValue("Sheet1", "B2", 100)// 設置工作簿的默認工作表f.SetActiveSheet(index)// 根據指定路徑保存文件if err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)}
}

讀取 Excel 文檔

package main
import ("fmt""github.com/xuri/excelize/v2""
)
func main() {f, err := excelize.OpenFile("Book1.xlsx")if err != nil {fmt.Println(err)return}// 獲取工作表中指定單元格的值cell, err := f.GetCellValue("Sheet1", "B2")if err != nil {fmt.Println(err)return}// 獲取 Sheet1 上所有單元格rows, err := f.GetRows("Sheet1")for _, row := range rows {for _, colCell := range row {fmt.Print(colCell, "\t")}fmt.Println()}
}

打開數據流

OpenReader 從 io.Reader 讀取數據流。、

創建一個簡單的 HTTP 服務器接收上傳的電子表格文檔,向接收到的電子表格文檔添加新工作表,并返回下載響應:

package main
import ("fmt""net/http""github.com/xuri/excelize/v2""
)
func process(w http.ResponseWriter, req *http.Request) {file, _, err := req.FormFile("file")if err != nil {fmt.Fprintf(w, err.Error())return}defer file.Close()f, err := excelize.OpenReader(file)if err != nil {fmt.Fprintf(w, err.Error())return}f.NewSheet("NewSheet")w.Header().Set("Content-Disposition", "attachment; filename=Book1.xlsx")w.Header().Set("Content-Type", req.Header.Get("Content-Type"))if _, err := f.WriteTo(w); err != nil {fmt.Fprintf(w, err.Error())}return
}
func main() {http.HandleFunc("/process", process)http.ListenAndServe(":8090", nil)
}

流式寫入

func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error)

NewStreamWriter 通過給定的工作表名稱返回流式寫入器,用于向已存在的空白工作表寫入大規模數據。請注意通過此方法按行向工作表寫入數據后,必須調用 Flush 函數來結束流式寫入過程,并需要確保所寫入的行號是遞增的,普通函數不能與流式函數混合使用在工作表中寫入數據。寫入過程中內存數據超過 16MB 時,流寫入器將嘗試使用磁盤上的臨時文件來減少內存使用,此時您無法獲取單元格值。例如,向工作表流式按行寫入 102400 行 x 50 列帶有樣式的數據:

f := excelize.NewFile()
defer func() {if err := f.Close(); err != nil {fmt.Println(err)}
}()
sw, err := f.NewStreamWriter("Sheet1")
if err != nil {fmt.Println(err)return
}
styleID, err := f.NewStyle(&excelize.Style{Font: &excelize.Font{Color: "777777"}})
if err != nil {fmt.Println(err)return
}
// 流式設置單元格的公式和值:
if err := sw.SetRow("A1",[]interface{}{excelize.Cell{StyleID: styleID, Value: "Data"},[]excelize.RichTextRun{{Text: "Rich ", Font: &excelize.Font{Color: "2354e8"}},{Text: "Text", Font: &excelize.Font{Color: "e83723"}},},},// 流式設置單元格的值和行樣式:excelize.RowOpts{Height: 45, Hidden: false}); err != nil {fmt.Println(err)return
}
for rowID := 2; rowID <= 102400; rowID++ {row := make([]interface{}, 50)for colID := 0; colID < 50; colID++ {row[colID] = rand.Intn(640000)}cell, err := excelize.CoordinatesToCellName(1, rowID)if err != nil {fmt.Println(err)break}if err := sw.SetRow(cell, row); err != nil {fmt.Println(err)break}
}
if err := sw.Flush(); err != nil {fmt.Println(err)return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)
}

SetRow 通過給定的起始坐標和指向數組類型“切片”的指針將數據按行流式寫入工作表中。請注意,在設置行之后,必須調用 Flush 函數來結束流式寫入過程,并需要確所保寫入的行號是遞增的。

相關 Excel 開源類庫性能對比

在這里插入圖片描述
下圖展示了 Go, Python, Java, PHP 和 NodeJS 語言中典型 Excel 開源基礎庫,基于普通個人計算機 (2.6 GHz 6-Core Intel Core i7, 16 GB 2667 MHz DDR4, 500GB SSD, macOS Monterey 12.3.1) 生成 50 列 102400 行純文本單元格的性能表現。
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多種類型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 與控制器之間的關系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 為什么要有headless&#xff1f;2…

CF113A Grammar Lessons 題解

一道模擬題。 題目傳送門 題目意思&#xff1a; 給你一個句子&#xff0c;讓你檢查這個句子的語法是否正確。&#xff08;語法請自行在題目中查看&#xff09; 思路&#xff1a; 就是模擬。依次判斷這個句子是否符合每一條語法即可。但是細節很多就因為細節我錯了好多次&…

數據挖掘 | 零代碼采集房源數據,支持自動翻頁、數據排重等

1 前言 城市規劃、商業選址等應用場景中經常會對地區房價、地域價值進行數據分析&#xff0c;其中地區樓盤房價是分析數據中重要的信息參考點&#xff0c;一些互聯網網站上匯聚了大量房源信息&#xff0c;通過收集此類數據&#xff0c;能夠對地區房價的分析提供參考依據。 如何…

216、仿真-基于51單片機溫度煙霧人體感應布防報警Proteus仿真設計(程序+Proteus仿真+原理圖+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、原理圖 五、程序源碼 資料包括&#xff1a; 需要完整的資料可以點擊下面的名片加下我&#xff0c;找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選…

SpringBoot 讀取配置文件

Spring Boot 中讀取配置文件有以下 5 種方法&#xff1a; 使用 Value 讀取配置文件。使用 ConfigurationProperties 讀取配置文件。使用 Environment 讀取配置文件。 Autowired private Environment environment; 實現EnvironmentAware接口 使用 PropertySource 讀取配置文件…

Python學習筆記_進階篇(一)_淺析tornado web框架

tornado簡介 1、tornado概述 Tornado就是我們在 FriendFeed 的 Web 服務器及其常用工具的開源版本。Tornado 和現在的主流 Web 服務器框架&#xff08;包括大多數 Python 的框架&#xff09;有著明顯的區別&#xff1a;它是非阻塞式服務器&#xff0c;而且速度相當快。得利于…

2023國賽數學建模思路 - 復盤:人力資源安排的最優化模型

文章目錄 0 賽題思路1 描述2 問題概括3 建模過程3.1 邊界說明3.2 符號約定3.3 分析3.4 模型建立3.5 模型求解 4 模型評價與推廣5 實現代碼 建模資料 0 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

衣服材質等整理(時常更新)

參考文章&圖片來源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纖維 01. 化學纖維 02. 聚酯纖維&#xff08;即&#xff0c;滌綸&#xff09; 一種由有機二元酸和二元醇通過化學縮聚制成的合成纖維。具有出色的抗皺性和保形性&#xff0c;所制衣物在穿著過程中不容…

Lua + mysql 實戰代碼

--[[luarocks lua語言的包管理器luasql https://luarocks.org/brew install luarocksluarocks install luasql-mysql 注意此處&#xff0c;如果你是 mariadb&#xff0c;然后要求指定 MYSQL_DIR 參數的時候&#xff0c;千萬不要指到 mariadb 的安裝目錄&#xff0c;而是要指…

linux通過NC工具啟動臨時端口監聽

1.安裝nc工具 yum install nc -y2. 啟動監聽指定端口 #例如監聽8080端口 nc -lk 8080#后臺監聽 nc -lk 8080 &3. 驗證 #通過另外一臺網絡能通的機器&#xff0c;telnet 該機器ip 監聽端口能通&#xff0c;并且能接手數據 telnet 192.xxx.xxx.xx 8080

單機編排docker compose

Docker之旅(8)-單機編排docker compose 當在宿主機啟動較多的容器時候&#xff0c;如果都是手動操作會覺得比較麻煩而且容易出錯&#xff0c; 并且每個容器之間也會有先后啟動的順序依賴等。這個時候推薦使用 docker 單機 編排工具 docker-compose&#xff0c;docker-compose …

爬蟲逆向實戰(十四)--某培訓平臺登錄

一、數據接口分析 主頁地址&#xff1a;某培訓平臺 1、抓包 通過抓包可以發現登錄是表單提交到j_spring_security_check 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個j_password加密參數 請求頭是否加密&#xff1f; 無響應是…

2024浙大MBA/MEM/MPA四個月沖刺備考策略

近期收到很多考生的咨詢&#xff1a;距離聯考就僅剩四個多月的時間&#xff0c;這個管理類聯考的難度如何&#xff1f;主要考些什么內容&#xff1f;現在才開始備考還有希望上岸浙大嗎&#xff1f;是不是要等到明年在開始備考比較合適&#xff1f;那么今天在這里小立老師就跟大…

Docker Dockerfile 使用方法

目錄 Dockerfile 介紹 創建Dockerfile文件 構建 Docker 鏡像 查看已下載的鏡像 運行 mysql 命令 Dockerfile 介紹 當使用Docker構建容器化應用程序時&#xff0c;Dockerfile是一個用于定義容器鏡像的文本文件。它包含了一系列指令&#xff0c;告訴Docker如何從基礎鏡像&a…

? 將本地已有的項目上傳到 git 倉庫

目錄 ? 將本地已有的項目上傳到 git 倉庫&#x1f3ed; 一、克隆 拷貝&#x1f3a8; 二、強行合并兩個倉庫 ? 將本地已有的項目上傳到 git 倉庫 有兩種方法&#xff1a; ? 一、克隆 拷貝 ? 二、強行合并兩個倉庫 &#x1f3ed; 一、克隆 拷貝 ? 直接用把遠程倉庫拉到本…

CentOS系統環境搭建(十二)——CentOS7安裝Elasticsearch

centos系統環境搭建專欄&#x1f517;點擊跳轉 CentOS 7.9安裝Elasticsearch 7.17.6 文章目錄 CentOS 7.9安裝Elasticsearch 7.17.61.下載2.上傳3.解壓4.調整es占用內存5.修改es默認Java為本地Java6.修改elasticsearch配置文件7.創建用戶8.Elasticsearch 后臺啟動與關閉9.es管…

查看 Linux 內核版本的幾種方法

uname -a uname -srm uname -r 分拆&#xff1a;Linux 5.13.0-19-generic x86 64 5-內核版本 13-主修訂版本 0-19 -次要修訂版本 過查看 /proc/version 文件確認 /proc 目錄包含虛擬文件&#xff0c;其中包含有關系統內存&#xff0c;CPU內核&#xff0c;已安裝文件系統等的信…

020-從零搭建微服務-認證中心(九)

寫在最前 如果這個項目讓你有所收獲&#xff0c;記得 Star 關注哦&#xff0c;這對我是非常不錯的鼓勵與支持。 源碼地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源碼地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【C#】條碼管理操作手冊

前言&#xff1a;本文檔為條碼管理系統操作指南&#xff0c;介紹功能使用、參數配置、資源鏈接&#xff0c;以及異常的解決等。思維導圖如下&#xff1a; 一、思維導圖 二、功能操作–條碼打印&#xff08;客戶端&#xff09; 2.1 參數設置 功能介紹&#xff1a;二維碼圖片樣…

Windows定時任務計劃無法顯示任務程序界面的問題解決

筆者這兩天寫了一個python腳本程序&#xff0c;用來自動從公司的主數據系統獲取數據&#xff0c;并按格式編制成excel。腳本程序編寫一切順利&#xff0c;運行結果很是完美&#xff0c;筆者很是舒心。但在最后一步&#xff0c;用上班的電腦每天早上定時運行它時&#xff0c;出了…