【python】自動でテキストをExcelに張り付け表を作る

プログラミング

今回は「テキストデータをExcelに張り付けて表を作る作業」を自動化してみましょう!!

これを 「【文字起こし】pythonでOCRを使ってみた」の「画像をテキストに変換する方法」と合わせることで、

実験データの写真を撮る→すぐにExcelの表が完成!!

ということができます。

非常に効率的ですね!!他の用途としては、会社の資料作りにも役に立つと思います。

ではさっそくやっていきましょう。

スポンサーリンク

必要なもの

今回必要になるものは

  • jupyternotebook

のみです。

xlwingsというモジュールを使いますが、Anacondaをインストールしてあれば何もしなくても使うことができます。

Anacondaのインストール方法は 「【python】AnacondaでDjangoを使うには」 を参考のこと。



下準備

写真からテキストデータを抽出

data.png

今回はこの写真をテキストデータにしていきます。

この写真を「data.png」として保存しておきます。

OCRでテキストに変換

次にOCRで画像をテキストに変換します。詳しいやり方は 「【文字起こし】pythonでOCRを使ってみた」 を見ていただくとわかるかと思います。

from PIL import Image

import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()

tool = tools[0]

txt = tool.image_to_string(
    Image.open('data.png'),
    lang="eng",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )
file = open('text-data.txt', 'w')
file.write(txt)
file.close()

print("image to text : Done")

jupyternotebookで実行して、画像をテキストに変更します。

さらに変換したテキストを「text-data.txt」として保存しています。

file_list.txtを作る

file_list.txtは書式を決めています。

中身はこのような形になります。

 
#data path          sheet-name  offsetX offsetY 
text-data.txt       Sheet1      0       0 

色々書いてありますが

  • data path:貼り付けたいデータの相対パスか絶対パス
  • sheet name:Excelのテンプレートシート名
  • offsetX:貼り付けたいデータのX始点
  • offsetY:貼り付けたいデータのY始点

ということです。



Excelにしていこう!

では、テキストデータをExcelに変換していきましょう。

 
import xlwings as xw

file_list = "file_list.txt"

wb = xw.Book()
for line_data in open(file_list, "r"):
    if line_data[0] == "#":
        continue
    split_line_data = line_data.split()

    sheets = split_line_data[1]
    offset_x = int(split_line_data[2]) + 1
    offset_y = int(split_line_data[3]) + 1

    y = 0
    for text_data in open(split_line_data[0], "r"):
        data = text_data.split()
        wb.sheets[sheets].range(offset_y + y, offset_x).value = data
        y += 1

#Save Excel
wb.save()
wb.close()

print("text to excel : Done")

新たに「Book1」が作られていると思います。ぼくはこのような結果になりました。

そこそこの精度で表にできましたね!!

反省点

元データの写真(data.png)、実はExcelのスクショです。

なので、「ExcelのスクショをExcelに変換」という意味の分からないことになってます。

これには理由があって、写真の解像度がよくないとひどい表が出来上がってしまうのです…。

おそらくOCRの精度の問題かと思うので、精度を上げる何かしらの方法があればやっていきたいと思います。



参考

テキストデータを半自動でExcelに貼り付け - Qiita
はじめに追記:この記事を作ってから気づいたのですが処理が遅いです…。あとスクリプトが走っている途中でExcelを触ると処理が止まります。0(:3 )〜 ('、3」 ∠ )xlwingsの紹介程度で…
https://codeday.me/jp/qa/20190427/718797.html
Pythonでファイルにデータを書き込んでいく方法
ExcelにPythonが搭載?その後 - xlwings を使おう - Qiita
マイクロソフトが Excel に Python を搭載することを検討しているというニュースが流れたのは1年前のことで、結構話題になりました。昨年の Python Advent Calendar 20…

コメント

  1. carder007 mn より:

    bookmarked!!, I love yoսr website!

  2. keigo-imagisi keigo-imagisi より:

    Thank you for your comment !!

  3. Buyaccs より:

    Hello There. I found your weblog the use of msn. That is a very
    neatfly written article. I’ll be sure to bookmark it and return to
    learn extra of your helpful information. Thank you for the
    post. I’ll definitely comeback.

  4. keigo-imagisi keigo-imagisi より:

    Thank you for your comment !!

  5. […] […]

タイトルとURLをコピーしました