国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了golang操作excel的高性能庫——excelize/v2。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

介紹

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

另外還有另外一個庫:github.com/360EntSecGroup-Skylar/excelize/v2,不過它已經(jīng)沒了,或者說它和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

快速開始

創(chuàng)建 Excel 文檔

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // 創(chuàng)建一個工作表
    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)
    // 根據(jù)指定路徑保存文件
    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()
    }
}

打開數(shù)據(jù)流

OpenReader 從 io.Reader 讀取數(shù)據(jù)流。、

創(chuàng)建一個簡單的 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 通過給定的工作表名稱返回流式寫入器,用于向已存在的空白工作表寫入大規(guī)模數(shù)據(jù)。請注意通過此方法按行向工作表寫入數(shù)據(jù)后,必須調(diào)用 Flush 函數(shù)來結束流式寫入過程,并需要確保所寫入的行號是遞增的,普通函數(shù)不能與流式函數(shù)混合使用在工作表中寫入數(shù)據(jù)。寫入過程中內(nèi)存數(shù)據(jù)超過 16MB 時,流寫入器將嘗試使用磁盤上的臨時文件來減少內(nèi)存使用,此時您無法獲取單元格值。例如,向工作表流式按行寫入 102400 行 x 50 列帶有樣式的數(shù)據(jù):

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 通過給定的起始坐標和指向數(shù)組類型“切片”的指針將數(shù)據(jù)按行流式寫入工作表中。請注意,在設置行之后,必須調(diào)用 Flush 函數(shù)來結束流式寫入過程,并需要確所保寫入的行號是遞增的。

相關 Excel 開源類庫性能對比

golang操作excel的高性能庫——excelize/v2,GO,golang,excel,開發(fā)語言
下圖展示了 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 行純文本單元格的性能表現(xiàn)。
golang操作excel的高性能庫——excelize/v2,GO,golang,excel,開發(fā)語言
golang操作excel的高性能庫——excelize/v2,GO,golang,excel,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-652624.html

到了這里,關于golang操作excel的高性能庫——excelize/v2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • LAXCUS分布式操作系統(tǒng):技術創(chuàng)新引領高性能計算與人工智能新時代

    LAXCUS分布式操作系統(tǒng):技術創(chuàng)新引領高性能計算與人工智能新時代

    隨著科技的飛速發(fā)展,高性能計算、并行計算、分布式計算、大數(shù)據(jù)、人工智能等技術在各個領域得到了廣泛應用。在這個過程中,LAXCUS分布式操作系統(tǒng)以其卓越的技術創(chuàng)新和強大的性能表現(xiàn),成為了業(yè)界的佼佼者。本文將圍繞LAXCUS分布式操作系統(tǒng)的技術創(chuàng)新,探討其在高性

    2024年02月12日
    瀏覽(34)
  • 《高性能MySQL》——創(chuàng)建高性能的索引(筆記)

    《高性能MySQL》——創(chuàng)建高性能的索引(筆記)

    索引(在MySQL中也叫做“鍵(key)”) 是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結構。 索引對于良好的性能非常關鍵。尤其是當表中的數(shù)據(jù)量越來越大時,索引對性能的影響愈發(fā)重要。 在數(shù)據(jù)量較小且負載較低時,不恰當?shù)乃饕龑π阅艿挠绊懣赡苓€不明顯,但當數(shù)據(jù)量逐漸增大時

    2024年02月07日
    瀏覽(95)
  • 【Linux高性能服務器編程】——高性能服務器框架

    【Linux高性能服務器編程】——高性能服務器框架

    ? hello !大家好呀! 歡迎大家來到我的Linux高性能服務器編程系列之高性能服務器框架介紹,在這篇文章中, 你將會學習到高效的創(chuàng)建自己的高性能服務器,并且我會給出源碼進行剖析,以及手繪UML圖來幫助大家來理解,希望能讓大家更能了解網(wǎng)絡編程技術?。?! 希望這篇

    2024年04月25日
    瀏覽(97)
  • 讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    1.4.4.1.?InnoDB的二級索引在葉子節(jié)點中保存了記錄的主鍵值,所以如果二級索引能夠覆蓋查詢,則可以避免對主鍵索引的二次查詢 7.1.5.1.?常見的類似錯誤通常是由于嘗試使用rsync備份InnoDB導致的 7.3.3.1.?否則,對于范圍查詢、索引覆蓋掃描等操作來說,速度可能會降低很多 7

    2024年02月08日
    瀏覽(97)
  • 讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    2.4.2.1.?按照索引列中的數(shù)據(jù)大小順序存儲的 2.4.3.1.?鍵前綴查找只適用于根據(jù)最左前綴的查找 2.4.4.1.?在查詢某些條件的數(shù)據(jù)時,存儲引擎不再需要進行全表掃描 2.4.4.2.?通過比較節(jié)點頁的值和要查找的值可以找到合適的指針進入下層子節(jié)點,這些指針實際上定義了子節(jié)點頁中

    2024年02月08日
    瀏覽(94)
  • 《高性能MYSQL》-- 查詢性能優(yōu)化

    《高性能MYSQL》-- 查詢性能優(yōu)化

    查詢性能優(yōu)化 深刻地理解MySQL如何真正地執(zhí)行查詢,并明白高效和低效的原因何在 查詢的生命周期(不完整):從客戶端到服務器,然后服務器上進行語法解析,生成執(zhí)行計劃,執(zhí)行,并給客戶端返回結果。 一條查詢,如果查詢得很慢,原因大概率是訪問的數(shù)據(jù)太多 對于低

    2024年03月11日
    瀏覽(97)
  • 《高性能MySQL》——查詢性能優(yōu)化(筆記)

    《高性能MySQL》——查詢性能優(yōu)化(筆記)

    將查詢看作一個任務,那么它由一系列子任務組成,實際我們所做的就是: 消除一些子任務 減少子任務的執(zhí)行次數(shù) 讓子任務運行更快 查詢的生命周期大概可分為 = { 客戶端 服務器 : 進行解析 , 生成執(zhí)行計劃 執(zhí)行:包括到存儲引擎的調(diào)用,以及用后的數(shù)據(jù)處理 { 排序 分組

    2024年02月13日
    瀏覽(92)
  • 高性能MySQL實戰(zhàn)(三):性能優(yōu)化

    大家好,我是 方圓 。這篇主要介紹對慢 SQL 優(yōu)化的一些手段,而在講解具體的優(yōu)化措施之前,我想先對 EXPLAIN 進行介紹,它是我們在分析查詢時必要的操作,理解了它輸出結果的內(nèi)容更有利于我們優(yōu)化 SQL。為了方便大家的閱讀,在下文中規(guī)定類似 key1 的表示二級索引,key_

    2024年02月11日
    瀏覽(93)
  • MYSQL高性能索引

    正確的選擇和創(chuàng)建索引是實現(xiàn)高性能查詢的基礎,以下是高效使用索引的方法 演示的sql 獨立的列 獨立的列指的是索引既不是表達式的一部分也不是函數(shù)的參數(shù)。 前綴索引 如果索引是很長的列,那么索引會變得很大,并且導致索引數(shù)層數(shù)變高。通常可以索引的部分字符,這

    2024年01月20日
    瀏覽(27)
  • 高性能:負載均衡

    高性能:負載均衡

    目錄 什么是負載均衡 負載均衡分類 服務端負載均衡 服務端負載均衡——軟硬件分類 服務端負載均衡——OSI模型分類 客戶端負載均衡 負載均衡常見算法 七層負載均衡做法 DNS解析 反向代理 ????????將用戶請求 分攤(分流)? 到不同的服務器上,提高系統(tǒng)整體并發(fā)能力及

    2024年02月03日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包