関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
以前に、docファイルをdocxファイルに変換するという記事をアップしたのですが、ついでにExcelの方も作っていたので、ついでにここにメモしておきます。保存し直しているだけですが。
サンプル
package main import ( "flag" "io/fs" "log" "os" "path/filepath" "strings" "github.com/devlights/goxcel" "github.com/devlights/goxcel/constants" ) type ( Args struct { dir string rmOriginal bool verbose bool } ) var ( args Args ) var ( appLog = log.New(os.Stdout, "", 0) ) func init() { flag.StringVar(&args.dir, "dir", ".", "directory path") flag.BoolVar(&args.rmOriginal, "rm", false, "remove original file") flag.BoolVar(&args.verbose, "verbose", false, "verbose mode") } func abs(p string) string { abs, err := filepath.Abs(p) if err != nil { log.Panic(err) } return abs } func main() { log.SetFlags(0) flag.Parse() if args.dir == "" { args.dir = "." } if err := run(); err != nil { log.Fatal(err) } } func run() error { quit := goxcel.MustInitGoxcel() defer quit() excel, release := goxcel.MustNewGoxcel() defer release() excel.MustSilent(false) wbs := excel.MustWorkbooks() rootDir := abs(args.dir) err := filepath.WalkDir(rootDir, func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() { return nil } if strings.Contains(filepath.Base(path), "~$") { return nil } if !strings.HasSuffix(path, ".xls") { return nil } wb, wbRelease, err := wbs.Open(abs(path)) if err != nil { return err } defer wbRelease() if args.verbose { appLog.Printf("converting: %s", path) } err = wb.SaveAsWithFileFormat(rename(path), constants.XlOpenXMLWorkbook) if err != nil { return err } if args.rmOriginal { return os.Remove(path) } return nil }) if err != nil { return err } return nil } func rename(p string) string { var ( base = filepath.Base(p) dir = filepath.Dir(p) xlsx = abs(filepath.Join(dir, strings.ReplaceAll(base, "xls", "xlsx"))) ) return xlsx }
以下のようにして利用します。
$ go build -o xls2xlsx.exe . $ ./xls2xlsx.exe -rm -dir /path/to/documents
指定したディレクトリ配下の xls ファイルを xlsx ファイルに変換します。
参考情報
GitHub - devlights/goxcel: Goxcel is a library to operate Excel using go-ole library.
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。