いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-159 (ExcelのシートをPDFに変換)

概要

自作のExcelライブラリに「ワークシートをPDFに変換するサンプルほしいな」ってコメント頂いたので、ちょこっと追加しました。勿体ないのでついでにここにもメモメモ。まあ、OLE経由で呼び出しているだけですがw

github.com

サンプル

package main

import (
    "flag"
    "fmt"
    "log"
    "os"
    "path/filepath"

    "github.com/devlights/goxcel"
    "github.com/devlights/goxcel/constants"
)

// flag parameters
var (
    src string
    dst string
)

// logs
var (
    appLog = log.New(os.Stdout, ">>> ", 0)
)

func main() {
    var (
        returnCode int
    )

    if err := run(); err != nil {
        _, _ = fmt.Fprint(os.Stderr, err)
        returnCode = -1
    }

    appLog.Println("done")

    os.Exit(returnCode)
}

func run() error {
    abs := func(p string) string {
        v, _ := filepath.Abs(p)
        return v
    }

    flag.StringVar(&src, "src", "", "source file")
    flag.StringVar(&dst, "dst", "result.pdf", "output pdf name")
    flag.Parse()

    if src == "" {
        flag.Usage()
        return nil
    }

    quitFn, _ := goxcel.InitGoxcel()
    defer quitFn()

    g, r, _ := goxcel.NewGoxcel()
    defer r()

    _ = g.Silent(false)

    wbs, err := g.Workbooks()
    if err != nil {
        return err
    }

    absPath := abs(src)
    wb, wbReleaseFn, err := wbs.Open(abs(src))
    if err != nil {
        return err
    }
    defer wbReleaseFn()
    appLog.Printf("WorkBook Open: %s", absPath)

    ws, err := wb.Sheets(1)
    if err != nil {
        return err
    }

    absPath = abs(src)
    err = ws.ExportAsFixedFormat(constants.XlTypePDF, absPath)
    if err != nil {
        return err
    }
    appLog.Printf("Export   PDF : %s", absPath)

    return nil
}

参考資料

docs.microsoft.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com