0
1

More than 3 years have passed since last update.

Golang で Word の内容を取得してみる

Last updated at Posted at 2020-11-07

はじめに

普段よく 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()

うまくいくといいね

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1