Open2

Golang http Server, Excel ファイル編集 ダウンロード

knaka Tech-Blogknaka Tech-Blog

概要

  • Go + Http server , Excel ダウンロードの例です。

[ 公開 2025/07/05 ]


関連

  • Excel 作成は、前回の記事を参考にしています。

https://zenn.dev/knaka0209/scraps/df0744f3fda19b


テストしたコード

https://gist.github.com/kuc-arc-f/bd5052f65ad19740a80714f583476967


  • download
  • http.ResponseWriter 使用
  • excel バイナリ作成
  • bytes.Bufferに、データ設定
  • w.Write レスポンスを出力

func serveXLSX(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }
    // 1. Excel ファイルを生成
    f := excelize.NewFile()
    var sheet_name = "Sheet1"
    index, _ := f.NewSheet(sheet_name)
    f.SetCellValue(sheet_name, "A1", "こんにちは")
    f.SetCellValue(sheet_name, "A2", "hoge2")
    f.SetActiveSheet(index)

    var buf bytes.Buffer
    if err := f.Write(&buf); err != nil {
        http.Error(w, "Excel 書き込みに失敗しました", http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    w.Header().Set("Content-Disposition", `attachment; filename="report.xlsx"`)
    w.Header().Set("Content-Length", strconv.Itoa(buf.Len()))

    // 4. レスポンスとして書き出し
    if _, err := w.Write(buf.Bytes()); err != nil {
        // クライアント切断などで Write に失敗する可能性あり
        // 必要に応じてログ出力など
    }
}


  • Excel ダウンロードできました。


knaka Tech-Blogknaka Tech-Blog

既存のExcelファイル編集 ダウンロード , GoLang + htttp

  • 前回の、Excel編集の続編です。
  • 既存テンプレート ファイルを読込。編集、ダウンロード機能
  • 背景色、罫線をテンプレートに設定し。出力できる。

テストしたコード

https://gist.github.com/kuc-arc-f/e05055c0b32cbf7d30d46084dff1c767


  • OpenFile: 既存ファイル読込、編集開始
  • bytes.Bufferに、データ設定
  • w.Write レスポンスを出力

func editXLSX(w http.ResponseWriter, r *http.Request) {
    if r.Method != "GET" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }
    //var xls_name = "./data/test.xlsx"
    var xls_name = "test.xlsx"
    f, err := excelize.OpenFile(xls_name)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        // Close the spreadsheet.
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()    
    // 1. Excel ファイルを生成
    var sheet_name = "Sheet1"
    f.SetCellValue(sheet_name, "A4", "hoge7")
    f.SetCellValue(sheet_name, "B4", 1014)

    // 元テンプレートは、保存しない。
    //if err := f.SaveAs(xls_name); err != nil {
    //    log.Fatal(err)
    //}

    var buf bytes.Buffer
    if err := f.Write(&buf); err != nil {
        http.Error(w, "Excel 書き込みに失敗しました", http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    w.Header().Set("Content-Disposition", `attachment; filename="edit_report.xlsx"`)
    w.Header().Set("Content-Length", strconv.Itoa(buf.Len()))

    // 4. レスポンスとして書き出し
    if _, err := w.Write(buf.Bytes()); err != nil {
        // クライアント切断などで Write に失敗する可能性あり
        // 必要に応じてログ出力など
    }
}


  • テンプレート編集後の。ダウンロード済 ファイル


  • run
go run .