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

概要
- Go + Http server , Excel ダウンロードの例です。
[ 公開 2025/07/05 ]
関連
- Excel 作成は、前回の記事を参考にしています。
テストしたコード
- 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 ダウンロードできました。

既存のExcelファイル編集 ダウンロード , GoLang + htttp
- 前回の、Excel編集の続編です。
- 既存テンプレート ファイルを読込。編集、ダウンロード機能
- 背景色、罫線をテンプレートに設定し。出力できる。
テストしたコード
- 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 .