一個讀寫excel的簡單程序(golang)

最近總有一些臨時統計的需求,比如其他團隊生產的一批數據,需要確認這批數據是否入到數倉,提供的列表就是一個excel,我們就需要讀取excel中的所有數據,之后查詢數倉數據庫確認這批數據是否存在,并分別將存在的與不存在的再標記出來。

1、讀取excel文件

首先準備一個excel,內容如下,大概有100條數據:

下面實現對該文檔的讀取,讀取方式包括一次性全部讀取,適合數據量不大的場景,也包括按行讀取,適合數據量大的場景:

func ExcelRead(name string) {f, err := excelize.OpenFile(name)if err != nil {fmt.Println("open file error:", err)return}defer f.Close()// 獲取所有sheet的名稱sheets := f.GetSheetMap()for _, name := range sheets {// 獲取單個sheet的全部內容,正式上線需要考慮內存占用問題rows, err := f.GetRows(name)if err != nil {fmt.Println("get rows error:", err)return}fmt.Println("rows lenth:", len(rows))// 每次讀取一行,減少內存占用for i := 0; i < 200; i++ {st, err := f.GetCellValue(name, fmt.Sprintf("A%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}if st == "" {break}et, err := f.GetCellValue(name, fmt.Sprintf("B%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}sub, err := f.GetCellValue(name, fmt.Sprintf("C%v", i+2))if err != nil {fmt.Println("get cell value error:", err)}fmt.Println(st, et, sub)}}
}

運行記錄:

2、寫excel文件

寫excel,那就把第一步讀取的excel重新寫入到excel中,并寫到兩個sheet中,內容為三列(A/B/C):?


func ExcelWrite(sheet1 [][]string, sheet2 [][]string) {col := []string{"A", "B", "C"}f := excelize.NewFile()defer f.Close()// 創建名為車端挖掘數據的工作表_, err := f.NewSheet("車端挖掘數據")if err != nil {fmt.Println("new sheet error:", err)return}// 設置單元格的值。f.SetCellValue("車端挖掘數據", "A1", "start_time")f.SetCellValue("車端挖掘數據", "B1", "end_time")f.SetCellValue("車端挖掘數據", "C1", "subject")for i, v := range sheet1 {for k, v1 := range v {f.SetCellValue("車端挖掘數據", col[k]+fmt.Sprintf("%v", i+2), v1)}}// 創建名為車端挖掘數據的工作表sheetName := "云端挖掘數據"index, err := f.NewSheet("云端挖掘數據")if err != nil {fmt.Println("new sheet error:", err)return}// 設置默認sheet,打開表格時,默認顯示的sheetf.SetActiveSheet(index)// 設置單元格的值。f.SetCellValue(sheetName, "A1", "start_time")f.SetCellValue(sheetName, "B1", "end_time")f.SetCellValue(sheetName, "C1", "subject")for i, v := range sheet1 {for k, v1 := range v {f.SetCellValue(sheetName, col[k]+fmt.Sprintf("%v", i+2), v1)}}// 將Excel另存為文件if err := f.SaveAs("/Users/liupeng/Downloads/test.xlsx"); err != nil {fmt.Println(err)}
}

運行結果:

3、在excel中生成柱狀圖

假設我們有這樣一組數據:

我們希望將這組數據寫入excel,并生成一個柱狀圖,類似這樣:

?代碼如下:

func CreateChart() {f := excelize.NewFile()defer f.Close()contents := [][]any{{nil, "Apple", "Orange", "Pear"},{"Small", 2, 3, 3},{"Normal", 5, 2, 4},{"Large", 6, 7, 8},}for idx, row := range contents {cell, err := excelize.CoordinatesToCellName(1, idx+1)if err != nil {fmt.Println(err)return}f.SetSheetRow("Sheet1", cell, &row)}if err := f.AddChart("Sheet1", "E1", &excelize.Chart{Type: excelize.Col3DClustered,Series: []excelize.ChartSeries{{Name:       "Sheet1!$A$2",Categories: "Sheet1!$B$1:$D$1",Values:     "Sheet1!$B$2:$D$2",},{Name:       "Sheet1!$A$3",Categories: "Sheet1!$B$1:$D$1",Values:     "Sheet1!$B$3:$D$3",},{Name:       "Sheet1!$A$4",Categories: "Sheet1!$B$1:$D$1",Values:     "Sheet1!$B$4:$D$4",}},Title: []excelize.RichTextRun{{Text: "Fruit Chart",},},}); err != nil {fmt.Println(err)return}// Save spreadsheet by the given path.if err := f.SaveAs("/Users/liupeng/Downloads/Book1.xlsx"); err != nil {fmt.Println(err)}
}

以上就是三個基礎的操作excel的方法,希望對大家有用。

歡迎投身技術的小伙伴們關注交流~~~~~~~~~~~~~~~~~~。

往期推薦:

我在百度的這10年~~

云岡石窟:翻開這本距今1565年、與天地同久長的石頭史書,感受北魏王朝雕刻藝術的巔峰之作。

一個異步架構設計:批量消費RabbitMQ,批量寫入Elasticsearch(golang實現)

歷經滄桑的應縣木塔,在風雨中已等你969年。

從北京到大同,走過600里,跨越1000年。

命令行參數的藝術:Python、Golang、C++技術實現

supervisor,你理應知道。

跑步的第六年,才真正了解運動的意義

微信小程序文章列表煥新顏:從丑小鴨到白天鵝的華麗蛻變

Elasticsearch高級檢索對決:search_after+pit和scroll,誰才是最佳選擇?

李白:為何兩次選擇做了上門女婿?

借助tritonserver完成gpt2模型的本地私有化部署

GRPC開發全攻略:從環境搭建到代碼實現

武漢抗疫英雄汪勇:平凡人的非凡之舉。

趴菜就是趴菜,捯飭3天,才搞出小程序頭部banner,還是個半成品

小程序實現文章列表點擊跳轉公眾號詳情頁

前端小趴菜終于把公眾號和開發的不能再磕磣的小程序首頁關聯上了

【續】開發triton客戶端,訪問clip-vit-large-patch14模型抽取圖片特征。

NVIDIA tritonserver實現CLIP-ViT模型工程化:輕松獲取圖片特征(by grpc or http)

一文揭秘:Golang+Elasticsearch輕松搭建AI時代的圖片搜索服務

輕松搭建Elasticsearch:Mac系統下的安裝指南

Kibana for Mac:極簡安裝教程

RabbitMQ-死信隊列(golang)

項目踩坑記--RabbitMq連接過多導致的內存打滿

elasticsearch查詢語言DSL構建包使用及實現原理(golang)

納蘭性德-我是人間惆悵客,世間唯有『若』字,最難成真

golang操作mysql之利器-gorm

Elasticsearch寫入、讀取、更新、刪除以及批量操作(golang)

抖音視頻批量下載工具

tritonserver學習之六:自定義c++、python custom backend實踐

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

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

相關文章

【AI面試準備】AI誤判案例知識庫優化方案

面試題&#xff1a;建立內部知識庫&#xff1a;收集AI誤判案例訓練領域專屬模型。 在回答關于“建立內部知識庫收集AI誤判案例訓練領域專屬模型”的面試問題時&#xff0c;建議從以下結構化框架展開&#xff0c;既能體現專業性&#xff0c;又能展現解決問題的系統性和實際落地…

Ocelot\Consul\.NetCore的微服務應用案例

案例資料鏈接&#xff1a;https://download.csdn.net/download/ly1h1/90733765 1.效果 實現兩個微服務ServerAPI1和ServerAPI2的負載均衡以及高可用。具體原理&#xff0c;看以下示意圖。 2.部署條件 1、騰訊云的輕量化服務器 2、WindowServer2016 3、.NETCore7.0 4、Negut …

中小企業MES系統需求文檔

適用對象&#xff1a;中小型離散制造企業&#xff08;年產值1-5億&#xff0c;員工200-800人&#xff09; 版本&#xff1a;V1.0 日期&#xff1a;2025年5月2日 一、業務背景與目標 1.1 現狀痛點 生產黑箱化&#xff1a;車間進度依賴人工匯報&#xff0c;異常響應延遲>2小…

OpenAI最新發布的GPT-4.1系列模型,性能體驗如何?

簡單來說,這次GPT-4.1的核心思路就是:更實用、更懂開發者、更便宜!OpenAI這次沒搞太多花里胡哨的概念,而是實實在在地提升了大家最關心的幾個點:寫代碼、聽指令、處理超長文本,而且知識庫也更新到了2024年6月。 寫代碼。要說這次GPT-4.1最亮眼的地方,可能就是寫代碼這塊…

【基礎算法】二分查找的多種寫法

前言 在算法競賽中&#xff0c;二分查找使用的頻率是非常高的&#xff0c;對于C選手而言&#xff0c;有STL中自帶的lower_bound和upper_bound二分查找&#xff0c;可以很方便的進行二分查找。但是非C選手、或者需要自定義多條件查找的情況需要自己寫一個二分&#xff0c;本文對…

蘭亭妙微:火箭發射界面案例分享

北京藍藍設計團隊來自清華美院&#xff0c;工作多年&#xff0c;行業經驗豐富&#xff0c;專業性很強。我們是熱愛設計&#xff0c;設計不僅是我們的專業&#xff0c;我們的職業&#xff0c;還是我們的愛好。每一個藍藍設計的設計師都希望自己的設計越來越好&#xff0c;以高標…

完美解決.NET Framework 4.0 中 System.Drawing 庫不支持 WebP 格式的圖像處理

如果你想在 .NET Framework 4.0 中使用 ImageMagick 處理圖片&#xff0c;可以通過 Magick.NET 庫來實現。Magick.NET 是 ImageMagick 的 .NET 封裝&#xff0c;可以用來讀取、寫入、編輯圖像。 以下是如何使用 Magick.NET 來處理圖像并提取圖像的寬度和高度。 步驟&#xff…

string--OJ1

鏈接: 例一 鏈接: 例er class Solution { public:int myAtoi(string str) {int sign 1;int ret0;int i0;while(str[i] ){i;}if(str[i]||str[i]-){if(str[i]-)sign*-1;i;}while(str[i]>0&&str[i]<9){int rstr[i] - 0;if(ret>INT_MAX/10||(retINT_MAX/10&…

Go 寫一個簡單的Get和Post請求服務

Go 寫一個簡單的Get和Post請求服務 ? 一、準備工作 安裝 Go 官網下載地址 安裝后執行&#xff1a; go version安裝 VS Code 插件 在 VS Code 插件市場搜索并安裝插件&#xff1a;Go&#xff08;由 Go 團隊提供&#xff09; 配置環境變量&#xff08;可選&#xff09; 設置 …

哪些因素會影響遠程視頻監控的質量?淺述EasyCVR視頻智能診斷技術

在安防領域&#xff0c;無線監控系統憑借其靈活部署、便捷擴展的特性得到廣泛應用。然而&#xff0c;實時監控圖像清晰度不足、回放調查受限等問題&#xff0c;嚴重制約了其應用效果。經分析&#xff0c;攝像機性能、線纜質量、無線網橋性能、交換機配置及供電電壓等是影響圖像…

Java大師成長計劃之第10天:鎖與原子操作

&#x1f4e2; 友情提示&#xff1a; 本文由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;平臺gpt-4o-mini模型輔助創作完成&#xff0c;旨在提供靈感參考與技術分享&#xff0c;文中關鍵數據、代碼與結論建議通過官方渠道驗證。 在多線程編程中&#xff0c;鎖與原子…

線性代數——行列式?

目錄 一、行列式的定義? 1-1、三階行列式練習 1-2、下面介紹下三角行列式、上三角行列式、對角行列式 ?編輯 二、行列式的性質 2-1、性質1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6 ?編輯 2-2、性質7 2- 3、拉普拉斯定理、克萊姆法則 三…

微軟推出數款Phi 4“開放式”人工智能模型

微軟周三推出了幾款新的“開放式”人工智能模型&#xff0c;其中功能最強大的模型至少在一個基準測試上可與 OpenAI 的 o3-mini 相媲美。所有新的授權模型——Phi 4 mini reasoning、Phi 4 reasoning 和 Phi 4 reasoning plus——都是“推理”模型&#xff0c;這意味著它們能夠…

VPN訪問SAP組服務器報登陸負載均衡錯誤88:無法連接到消息服務器(RC=9)

用戶反饋用SAPGUI接入SAP時報錯&#xff1a;登陸負載均衡錯誤88&#xff1a;無法連接到消息服務器(RC9) 經了解是通過VPN訪問&#xff0c;但VPN沒有放行ICMP訪問&#xff0c;導致不能PING通&#xff0c;不能確認是網絡問題還是什么問題。 解決方案&#xff1a; 1、VPN由原&am…

使用AI-01開發板和開源后端服務搭建整套小智服務系統

使用AI-01開發板和開源后端服務搭建整套小智服務系統 四博智聯的AI-01開發板&#xff0c;基于樂鑫ESP32-C2 專屬定制的離線語音模組&#xff0c;能夠完美的接入小智AI服務平臺&#xff0c;再使用開源后端服務&#xff0c;就能夠搭建一個完整的小智AI服務系統了。 下面是具體…

字節跳動在GitHub上有哪些開源項目

字節跳動&#xff08;ByteDance&#xff09;在GitHub上開源了許多項目&#xff0c;涵蓋前端、后端、云原生、AI、數據庫等多個領域。以下是一些典型項目及其簡介&#xff1a; 1. 前端 & 跨平臺開發 Hippy 倉庫: Tencent/Hippy&#xff08;注&#xff1a;Hippy 最初由騰訊開…

超長8分鐘Suno V4.5 – 支持一首歌多風格轉換啦~~~

f歷史文章 Suno AI API接入 - 將AI音樂接入到自己的產品中&#xff0c;支持120并發任務 AI音樂支持中文&#xff0c;實測效果&#xff0c;大家自己聽聽看嘍 2025年新年快樂&#xff0c;Viggle AI打開新年快樂 讓照片舞動起來&#xff0c;只要3分鐘就可以搞定了&#xff0c;…

vue3+ts項目 配置vue-router

安裝vue-router pnpm install vue-router配置 1.src/router/index.ts文件下的內容 import type { App } from vue import type { RouteRecordRaw } from vue-router import { createRouter, createWebHistory } from vue-router import remainingRouter from ./modules/remai…

如何利用dify 生成Fine?tune 需要的Alpaca 格式數據

如果你選擇llamafactory 格式進行微調&#xff0c;它只是格式是Alpaca格式&#xff0c;dify 的agent dsl 如下&#xff0c;你可以導入本地的dify 或者導入cloud 版本的&#xff1b;測試版本是0.1.5 app:description: 上傳文件&#xff0c;基于文件內容&#xff0c;使用 Silico…

C++開發指南

一、C++ 是什么? C++ 是一種強大、靈活、高性能的系統級編程語言,由 Bjarne Stroustrup 在 20 世紀 80 年代初開發,是 C 語言的超集。它既支持面向過程編程,也支持面向對象、泛型、函數式等現代范式。 C++ 被廣泛應用于: 系統軟件(如操作系統、編譯器)游戲開發(如 Un…