類似記事
- Goメモ-45 (Excelの各シートのズーム倍率を揃える)
- Goメモ-46 (Excelの各シートの最初のセルを選択状態にする)
- Goメモ-47 (Excelの特定シートのフッターの値を調整
- Goメモ-48 (Excelの特定シートの印刷の向きを調整)
- Goメモ-56 (Excelシートのページ区切りの先頭にメッセージ入れる)
- Goメモ-57 (Excelシートの画像の上にNo.XXってナンバリングしていく)
- Goメモ-122 (別ファイルのExcelシートをコピーしてもってくる)
- Goメモ-124 (画像ファイルをExcelに挿入する)
- Goメモ-159 (ExcelのシートをPDFに変換)
概要
小ネタ。
仕事によっては、たまにExcelの表を画像にして別の資料に貼り付けたりする場面もあったりしますよね。。。
対象のファイルが5個とかそれくらいなら、まだ手でやってもいいと思いますが、フォルダの下に数十・・・数百とかファイルがあって、中にシートも何個もあると人間がやる作業じゃなくなります。。。。
こういうのはコンピュータさんにしてもらうのが一番です。
てことで、GoでちょこっとExcel操作するプログラム作ったので、ついでにサンプルをメモメモ。
サンプル
サンプルとして、特定範囲に適当な値をセットした領域を画像にして出力しています。
やっていることは、Excelで「図としてコピー」をクリックしたものと同じことですね。
出力ファイルは、pngファイルとなります。
OLE経由でRange.CopyPictureを呼び出した後に、クリップボード経由で画像を出力しています。
Goでクリップボード操作するライブラリは
を使いました。とても使いやすいライブラリです。感謝。
package main import ( "fmt" "github.com/devlights/goxcel" "github.com/devlights/goxcel/constants" "github.com/skanehira/clipboard-image/v2" "io" "os" ) func main() { if err := run(); err != nil { panic(err) } } //goland:noinspection GoUnhandledErrorResult func run() error { quit := goxcel.MustInitGoxcel() defer quit() excel, release := goxcel.MustNewGoxcel() defer release() wbs := excel.MustWorkbooks() wb, wbr := wbs.MustAdd() defer wbr() ws := wb.MustSheets(1) rows := []int{1, 2, 3, 4, 5, 10, 20, 30} for _, row := range rows { cols := []int{1, 2, 3, 4, 5} for _, col := range cols { c, _ := ws.Cells(row, col) c.MustSetValue(fmt.Sprintf("%v,%v", row, col)) } } usedRange, _ := ws.UsedRange() _ = usedRange.Select() err := usedRange.CopyPicture(constants.XlScreen, constants.XlBitmap) if err != nil { return err } // Read image-binary from Clipboard // Thanks: https://github.com/skanehira/clipboard-image cr, err := clipboard.Read() if err != nil { return err } // Write to file file, err := os.Create("./image.png") if err != nil { return err } defer file.Close() if _, err := io.Copy(file, cr); err != nil { return err } return nil }
実行すると、デフォルトだとコマンドと同じディレクトリに image.png
ってファイルが出来ます。
こんな感じの画像が出力されます。
$ git clone https://github.com/devlights/goxcel.git $ cd goxcel $ cd examples/range_copy_picture $ go run main.go
go-oleを内部で使っているので windows 限定です。
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。