類似記事
- 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に変換)
- Goメモ-291 (Excelの特定範囲のRangeを画像にして出力)
概要
小ネタ。
仕事によっては、たまにExcelの表を画像にして別の資料に貼り付けたりする場面もあったりしますよね。。。
対象のファイルが5個とかそれくらいなら、まだ手でやってもいいと思いますが、フォルダの下に数十・・・数百とかファイルがあって、中にシートも何個もあると人間がやる作業じゃなくなります。。。。
こういうのはコンピュータさんにしてもらうのが一番です。
てことで、GoでちょこっとExcel操作するプログラム作ったので、ついでにサンプルをメモメモ。
サンプル
サンプルとして、Excelの各シートの内容を画像にして出力しています。
やっていることは、Excelでデータが入っている領域を選択して「図としてコピー」をクリックしたものと同じことですね。
サンプルなので、対象のExcelファイルはソースコード内にハードコートしています。利用される際は適時変更してご利用ください(利用する人はいないと思いますが)
出力ファイルは、pngファイルとなります。
OLE経由でRange.CopyPictureを呼び出した後に、クリップボード経由で画像を出力しています。
Goでクリップボード操作するライブラリは
を使いました。とても使いやすいライブラリです。感謝。
テスト用のExcelファイルには、helloworld1
ってシート名で以下の様にデータを設定しています。
2つ目のシートは、helloworld2
ってシート名で以下の様にデータを設定しています。
package main import ( "bufio" "fmt" "github.com/devlights/goxcel" "github.com/devlights/goxcel/constants" "os" "path/filepath" ) func main() { dir, err := os.Getwd() if err != nil { panic(err) } if err := run(dir); err != nil { panic(err) } } //goland:noinspection GoUnhandledErrorResult func run(curdir string) error { quit := goxcel.MustInitGoxcel() defer quit() excel, release := goxcel.MustNewGoxcel() defer release() wbs := excel.MustWorkbooks() wb, wbRelease := wbs.MustOpen(filepath.Join(curdir, "testdata", "TestData.xlsx")) defer wbRelease() wss := wb.MustWorkSheets() _, err := wss.Walk(func(ws *goxcel.Worksheet, index int) error { name, err := ws.Name() if err != nil { return err } usedRange, err := ws.UsedRange() if err != nil { return err } file, err := os.Create(filepath.Join(curdir, fmt.Sprintf("%s.png", name))) if err != nil { return err } defer file.Close() bufW := bufio.NewWriter(file) err = usedRange.CopyPictureToFile(bufW, constants.XlScreen, constants.XlBitmap) if err != nil { return err } defer bufW.Flush() return nil }) if err != nil { return err } return nil }
実行すると、デフォルトだとコマンドと同じディレクトリに シート名.png
ってファイルが出来ます。
こんな感じの画像が出力されます。
$ git clone https://github.com/devlights/goxcel.git $ cd goxcel $ cd examples/range_copy_picture_allsheets $ go run main.go
go-oleを内部で使っているので windows 限定です。
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。