はじめに
普段よく Golang でちょっとした社内ツールを開発しています
先日、後輩からこんな相談を受けました
「毎週、Word で書かれたドキュメントを Excel に貼り付けてまとめるだけの作業があるんです...」
「しかも、.docx
と .doc
が混在しているんです...」
Oh...
調べてみたところ、良さげなパッケージを見つけたため使ってみました
code.sajari.com/docconv
Word のファイルをただ読み込んでコンソールに出力するだけのプログラム
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
"code.sajari.com/docconv"
)
// WordContent Word のファイルから取得した内容を保持
type WordContent struct {
body string
}
// String fmt.Println() で出力する時に呼ばれる
func (wc *WordContent) String() string {
return strings.TrimSpace(wc.body)
}
// FileRead filename で指定されたパスのファイル読み込み、そのコンテンツを返す
func FileRead(filename string) (*WordContent, error) {
f, err := os.Open(filename)
if err != nil {
return nil, fmt.Errorf("fail to open file: %v", err)
}
defer f.Close()
switch filepath.Ext(filename) {
case ".docx":
content, _, err := docconv.ConvertDocx(f)
wc := WordContent{content}
return &wc, err
case ".doc":
content, _, err := docconv.ConvertDoc(f)
wc := WordContent{content}
return &wc, err
}
return nil, nil
}
func main() {
filename1 := "samples/sample.docx"
wc, err := FileRead(filename1)
if err != nil {
log.Fatalln(err)
}
fmt.Println(wc)
fmt.Println("----------------")
filename2 := "samples/sample.doc"
wc, err = FileRead(filename2)
if err != nil {
log.Fatalln(err)
}
fmt.Println(wc)
}
ポイントは、拡張子によってファイルを読み込むメソッドが違うという点くらい
-
.docx
->docconv.ConvertDocx()
-
.doc
->docconv.ConvertDoc()
うまくいくといいね