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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

1回答

2290閲覧

python3.6でエクセルにセーブする際のエラー

SoojunBarng

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2018/07/19 09:06

編集2018/07/19 09:11

やりたい事

簡単にdef excel_inputというモジュールを設定し、エクセルファイルを得ようとしているんですが、なかなか何処が間違っているのかがよくわからないです。

エラー文では、strクラス結果を返すところがあり、エラーが起きていると書いていますが、自分がどこをstring結果がでるように設定したのかよくわからないです!

どうか、知恵を貸して下さい!

エラー

Message File Name Line Position Traceback <module> I:\セーブファイル\研究スタート\2018\プログラミング関連\0718\targeting example 0709.py 60 excel_input I:\セーブファイル\研究スタート\2018\プログラミング関連\0718\targeting example 0709.py 51 append C:\Users\powwe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\openpyxl\worksheet\worksheet.py 788 _invalid_row C:\Users\powwe\AppData\Local\Programs\Python\Python36-32\lib\site-packages\openpyxl\worksheet\worksheet.py 868 TypeError: Value must be a list, tuple, range or generator, or a dict. Supplied value is <class 'str'>
import os import re import openpyxl import itertools from openpyxl import Workbook path = "D:/2018/result/Ac-" os.chdir(path) K_infinite_list=[] K=[0] name = ["K_infinite_list","K"] NAME = [K_infinite_list,K] def sub1_1(): pattern = re.compile("final estimated") try: with open ("2251-1o","r") as file: # open file for reading text. for linenum2, line in enumerate(file): # Keep track of line numbers. if pattern.search(line) != None: # If substring search finds a match, K_infinite_list.append((linenum2, line.rstrip('\n'))) # strip linebreaks, store line and line number in list as tuple. print (linenum2) return linenum2 except FileNotFoundError: # If log file not found, print("Log file not found.") # print an error message. def sub2_1(): linenum2 = sub1_1() with open ("2251-1o","r") as file: for line in itertools.islice(file, linenum2-1, linenum2): return line def excel_input(): wb = Workbook() ws = wb.active ws = wb.create_sheet("Ac") data = [name, K_infinite] for row in data: ws.append(row) wb.save("Actinide.xlsx") file = open("2251-1o","r") K_infinite_line = sub2_1() K_infinite = str(K_infinite_line)[1:87] print (K_infinite) excel_input()

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

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

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

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

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

guest

回答1

0

Tracebackの読み方

TypeError: Value must be a list, tuple, range or generator, or a dict. Supplied value is <class 'str'>

a. 一番最後の行が実際に発生したエラー
エラーメッセージをグーグル翻訳にかけると良いです。

グーグル翻訳

TypeError:値は、リスト、タプル、範囲またはジェネレータ、またはdictでなければなりません。供給される値は<class 'str'>

b. 呼び出した関数名(スタックフレーム)、ファイル名、行番号

excel_input
append

よってexcel_input関数のappendを使っている所でエラーが発生したのです。

Python

1def excel_input(): 2 wb = Workbook() 3 ws = wb.active 4 ws = wb.create_sheet("Ac") 5 6 data = [name, K_infinite] 7 8 for row in data: 9 ws.append(row) # ←よってこの行です。 10 11 wb.save("Actinide.xlsx")

直し方は調べて頂くとして、コードを変更したときのソースのバージョン管理が行えていないためにこのようなトラブルは発生します。
ようするに、正常に動いたソースコードを管理できていない。
Gitなどのバージョン管理ツールを使用する(GitHub & GitHub Desktop for Windowsの構成)がWindows環境なら導入しやすいでしょう。
もしくはpycharmCommunity EditionにあるLocal History機能を活用されることをオススメいたします。

投稿2018/07/21 09:49

編集2018/07/21 10:04
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問