質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1029閲覧

Python For文で取得した値をExcelに書き込む事ができない

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/07/07 14:03

編集2020/07/08 15:57

こんにちは

Python 初心者です。ずっと悩んでいます。
Pythonに詳しい方ご回答いただけますと幸いです。

#問題
for文で得た値をexcelのセルにひとつずつ記載したいのですがうまくいきません。
取り出す値は複数のファイルで共通の"test sheet"を含む行になります。またその後ろの数値はそれぞれ異なります。

(例)
test.txt
test sheet 5000

test1.txt
test sheet 6000

#試した事

import openpyxl as px import pandas as pd import glob a = glob.glob('*.txt') print (a) wb = px.Workbook() ws = wb.active j = 1 for i in a: path = i with open(path) as f: lines = f.readlines() lines_strip = [line.strip() for line in lines] Value1 = [line for line in lines_strip if 'test sheet' in line] print(Value1[0]) ws.cell(row=j,column=2).value = Value1 j += 1 wb.save('test.xlsx')

上記を試しましたがエラーが以下のようなエラーが発生します。

Traceback (most recent call last): File "C:\Users\user\Desktop\Python Practice\test.py", line 23, in <module> ws.cell(row=j,column=2).value = Value1 File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\cell\cell.py", line 216, in value self._bind_value(value) File "C:\Users\cell\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\cell\cell.py", line 199, in _bind_value raise ValueError("Cannot convert {0!r} to Excel".format(value)) ValueError: Cannot convert ['test sheet 5000'] to Excel

どうしたらエラーなくExcelに書き込む事ができるでしょうか?
ご回答いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/07/07 14:32

で、しつもんはなんでしょうか
退会済みユーザー

退会済みユーザー

2020/07/07 15:01 編集

どのようなコードを書けば実現可能でしょうか? もしくは、ライブラリ等のインストールは必要でしょうか? ご回答頂けますと幸いです。
aokikenichi

2020/07/08 03:42

「上記からそれぞれ、2つめの値"5000" "8989" "5000"を出力」 2.txtからは19299ではないのでしょうか 「1.txtから抽出した5000は sheet1 の A1へ書き込む 2.txtから抽出した8989は sheet2 の A3へ書き込む 3.txtから抽出した5000は sheet1 の A3へ書き込む」 このルールが分かりません 2.txtだけsheet2で3.txtはsheet1に戻るのは何故でしょうか。A2は用いずA3なのは何故でしょうか。 Python以前に問題点を整理なさってください。
退会済みユーザー

退会済みユーザー

2020/07/08 08:48

aokikenichiさん コメント頂きありがとうございます。 2.textの件ご指摘通り19299が出力したい値となります。 また、書き込むルールについては、for文で取得した結果をそれぞれ異なるシート/セルに書き込む事が可能かということでそうしています。 問題点は、 for文で取得した値を取得元のテキストファイルごとに違うセルに書きこめないという事です。 冗長になってしまって申し訳ございません。 優秀な皆さまのご知恵をお貸しいただけると幸いです。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

問題点は、

for文で取得した値を取得元のテキストファイルごとに違うセルに書きこめないという事です。

であれば100ファイルあるとかpandaとか2番目の値を抽出するとかは全く関係ないと思います。

「出来ない」
では何をしたくて何が出来ないのかわからないのでご自身が試したこと、エラーが出ればそのメッセージもお示しください。

恐らくこうされただろうと想定して

Python

1sheet1 = book['Sheet1'] 2sheet1['A1'] = 123 3 4sheet2 = book['Sheet2'] 5sheet2['A2'] = 256 6 7book.save('test.xlsx')

こうすると下記エラーが出たはずです。

KeyError: 'Worksheet Sheet2 does not exist.'

Excelファイルを開いていただければお分かりになるかと思いますがSheet2がないからです。

エラーメッセージか「openpyxl シート追加」あたりでググるとすぐ出てきますが

Python

1import openpyxl 2 3book = openpyxl.load_workbook('test.xlsx') 4 5sheet1 = book['Sheet1'] 6sheet1['A1'] = 123 7sheet1['A2'] = 256 8 9book.create_sheet(index=1, title='Sheet2') 10sheet2 = book['Sheet2'] 11sheet2['A3'] = 512 12 13 14book.save('test.xlsx')

このようにシートを追加します(あるいはExcel側でシートを作成して準備しておきます。

----
余計なお世話ですが、

問題は何かよく整理すること
試したこと試してないこと、エラーが出ればエラーメッセージを理解すること
理解出来なければググる等でほとんどの場合解決します

投稿2020/07/08 10:10

aokikenichi

総合スコア2240

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/08 15:55

aokikenichiさんご回答いただきありがとうございます。 また内容についてご指摘いただきありがとうございます。 問題内容を再整理してみました。 もし可能であれば再度内容を確認いただき解決法があればご教示いただけますと幸いです。 よろしくお願いします。
aokikenichi

2020/07/09 09:09

申し訳ないですが例示プログラムも問題設定もかなり変わっておりませんか? 私が回答した内容で異なるシート、異なるセルに書き込めます これは試していただけたのでしょうか。 ご質問に対し時間を割き、わざわざテストファイルを作成し回答出来ることを試しました 都度問題を変えられるとついていけないです 別問題をご質問なさりたいのであれば質問は一旦閉じて別の質問をなさってください 該当エラーについては既にteratail同様のQAがあります https://teratail.com/questions/160235
退会済みユーザー

退会済みユーザー

2020/07/13 16:31 編集

解決
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問