這篇文章為大家帶來了關於Golang的相關知識,其中主要跟大家介紹怎麼用Golang生成Excel文檔 ,有興趣的朋友下面一起來看一下吧,希望對大家有幫助。
基於資料產生Excel 文檔是一個很常見的需求,本文將介紹如何使用Go 的Excelize 函式庫去產生Excel 文檔,以及一些具體場景下的程式碼實作。
關於 Excelize 函式庫
Excelize
是 Go 語言編寫的用於操作 Office Excel 文件基礎庫,基於 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入 Microsoft Excel™ 2007 以上版本所建立的電子表格文件。支援XLSX / XLSM / XLTM / XLTX 等多種文檔格式,高度相容於帶有樣式、圖片(表)、透視表、切片器等複雜組件的文檔,並提供串流讀寫API,用於處理包含大規模數據的工作簿。可應用於各類報表平台、雲端運算、邊緣運算等系統。使用本類庫要求使用的 Go 語言為 1.15 或更高版本。
效能比較
下圖是一些主要的開源Excel 函式庫在產生12800*50 純文字矩陣時的效能比較(OS: macOS Mojave version 10.14.4, CPU: 3.4 GHz Intel Core i5, RAM: 16 GB 2400 MHz DDR4, HDD: 1 TB),包括Go、Python、Java、PHP 和NodeJS。
安裝
最新的版本是v2.4.0
:
go get github.com/360EntSecGroup-Skylar/excelize/v2
建立Excel 文件
#在下面的案例中,我們建立了一個Excel 文檔,並使用NewSheet
方法新建了一個Sheet2
工作表,Sheet1
是預設建立的工作表,然後我們使用SetCellValue
方法分別在Sheet2
工作表的A2
單元格和Sheet1
表格的B2
單元格設定值,並透過使用SetActiveSheet
方法設定Sheet2
工作表為預設的工作表,最終呼叫SaveAs
方法將資料寫入Excel 文件中:
package main import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" ) func main() { f := excelize.NewFile() // 创建一个工作表 index := f.NewSheet("Sheet2") // 设置单元格的值 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) } }
實際場景複現
建立工作表
工作表名稱是大小寫敏感的:
index := f.NewSheet("Sheet2")
刪除預設建立的工作表
預設建立的Excel 文件是包含一個名為Sheet1
的工作表,我們可能不需要這個預設工作表,這個時候我們可以刪除這個工作表:
f.DeleteSheet("Sheet1")
合併儲存格
合併Sheet1
工作表上F1:I2
區域內的儲存格:
excel.MergeCell("Sheet1", "F1", "I2")
儲存格樣式
#為儲存格設定樣式會經常遇到,例如設定儲存格的背景顏色,Excelize
函式庫提供下面兩個方法進行設定儲存格樣式(NewStyle
和 SetCellStyle
):
// 通过给定的样式格式 JSON 或结构体的指针创建样式并返回样式索引。 // 请注意,颜色需要使用 RGB 色域代码表示。 style, err := f.NewStyle(`{ "border": [ { "type": "left", "color": "0000FF", "style": 3 }, { "type": "top", "color": "00FF00", "style": 4 }, { "type": "bottom", "color": "FFFF00", "style": 5 }, { "type": "right", "color": "FF0000", "style": 6 }, { "type": "diagonalDown", "color": "A020F0", "style": 7 }, { "type": "diagonalUp", "color": "A020F0", "style": 8 }] }`) if err != nil { fmt.Println(err) } err = f.SetCellStyle("Sheet1", "D7", "D7", style)
文字水平居中
文字水平居中需要用到Alignment
樣式結構體:
type Alignment struct { Horizontal string `json:"horizontal"` Indent int `json:"indent"` JustifyLastLine bool `json:"justify_last_line"` ReadingOrder uint64 `json:"reading_order"` RelativeIndent int `json:"relative_indent"` ShrinkToFit bool `json:"shrink_to_fit"` TextRotation int `json:"text_rotation"` Vertical string `json:"vertical"` WrapText bool `json:"wrap_text"` }
水平居中只要設置Horizontal
的值為center
即可:
style, err := f.NewStyle(`{"alignment":{"horizontal":"center"}}`) if err != nil { fmt.Println(err) } err = excel.SetCellStyle("Sheet1", "B1", "B1", style)
為單元格設定純色填滿
給儲存格填滿顏色會使用到 Fill
樣式結構體:
type Fill struct { Type string `json:"type"` Pattern int `json:"pattern"` Color []string `json:"color"` Shading int `json:"shading"` }
Style 結構體
從上面設定樣式的程式碼中,我們可以發現border
是一個數組,而 alignment
是一個結構體,這是由Style
結構體決定的:
type Style struct { Border []Border `json:"border"` Fill Fill `json:"fill"` Font *Font `json:"font"` Alignment *Alignment `json:"alignment"` Protection *Protection `json:"protection"` NumFmt int `json:"number_format"` DecimalPlaces int `json:"decimal_places"` CustomNumFmt *string `json:"custom_number_format"` Lang string `json:"lang"` NegRed bool `json:"negred"` }相關推薦:Go影片教學
以上是一文詳解Golang如何產生Excel文檔的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Go的"strings"包提供了豐富的功能,使字符串操作高效且簡單。 1)使用strings.Contains()檢查子串。 2)strings.Split()可用於解析數據,但需謹慎使用以避免性能問題。 3)strings.Join()適用於格式化字符串,但對小數據集,循環使用 =更有效。 4)對於大字符串,使用strings.Builder構建字符串更高效。

Go語言使用"strings"包進行字符串操作。 1)拼接字符串使用strings.Join函數。 2)查找子串使用strings.Contains函數。 3)替換字符串使用strings.Replace函數,這些函數高效且易用,適用於各種字符串處理任務。

資助bytespackageingoisesential foreffited byteSemanipulation,uperingFunctionsLikeContains,index,andReplaceForsearchingangingAndModifyingBinaryData.itenHancesperformanceNandCoderAceAnibility,MakeitiTavitalToolToolToolToolToolToolToolToolToolForhandLingBinaryData,networkProtocols,networkProtocoLss,networkProtocols,andetFilei

Go語言使用"encoding/binary"包進行二進制編碼與解碼。 1)該包提供binary.Write和binary.Read函數,用於數據的寫入和讀取。 2)需要注意選擇正確的字節序(如BigEndian或LittleEndian)。 3)數據對齊和錯誤處理也是關鍵,確保數據的正確性和性能。

1)usebybytes.joinforconcatenatinges,2)bytes.bufferforincrementalwriting,3)bytes.indexorbytes.indexorbytes.indexbyteforsearching bytes.bytes.readereforrednorederencretingnchunknunknchunknunk.sss.inc.softes.4)

theencoding/binarypackageingoiseforporptimizingBinaryBinaryOperationsDuetoitssupportforendiannessessandefficityDatahandling.toenhancePerformance:1)usebinary.nativeendiandiandiandiandiandiandiandian nessideendian toavoid avoidByteByteswapping.2)

Go的bytes包主要用於高效處理字節切片。 1)使用bytes.Buffer可以高效進行字符串拼接,避免不必要的內存分配。 2)bytes.Equal函數用於快速比較字節切片。 3)bytes.Index、bytes.Split和bytes.ReplaceAll函數可用於搜索和操作字節切片,但需注意性能問題。

字節包提供了多種功能來高效處理字節切片。 1)使用bytes.Contains檢查字節序列。 2)用bytes.Split分割字節切片。 3)通過bytes.Replace替換字節序列。 4)用bytes.Join連接多個字節切片。 5)利用bytes.Buffer構建數據。 6)結合bytes.Map進行錯誤處理和數據驗證。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3漢化版
中文版,非常好用