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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

9189閲覧

pythonでのexcelの操作について

u_k_statistics

総合スコア44

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2015/07/28 08:31

pythonを使ってexcelデータを読み込み、そのデータをmysqlに入れたいのですが、最初の段階のデータの読み込みがうまくいきません。

import glob
import xlrd
files = glob.glob('/Users/xxx/xxxx/xxxxx/xxxxxx/*.xlsx')

book = xlrd.open_workbook(files[0])
sheet_1 = book.sheet_by_index(0)
for col in range(sheet_1.ncols):
for row in range(sheet_1.nrows):
items = sheet_1.cell(row,col).value

print items[1]

としても
IndexError: string index out of range
となってしまいます。
また
book = xlrd.open_workbook(files[0])
sheet_1 = book.sheet_by_index(0)
for col in range(sheet_1.ncols):
for row in range(sheet_1.nrows):
print sheet_1.cell(row,col).value

とすると値は返ってきます。
ただ、のちにmysqlにデータを入れたいのでitemsに値が入ってくれないと困ります><
どなたか解決策をご存知の方がいらっしゃいましたら、宜しくお願いしますm(__)m

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

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

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

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

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

guest

回答1

0

おそらくですが、IndexError: string index out of range というエラーから

py

1print items[1]

の行が間違っているように思います。
試しに以下のように書き換えてみてください。

py

1print items[0]

それと

py

1files = glob.glob('/Users/xxx/xxxx/xxxxx/xxxxxx/*.xlsx')

の行で読み込んでいるファイルがxlsxなので、使うライブラリは openpyxl の方がいいと思います。

自分のUbuntuの環境で総務省が公開しているxlsxファイルを試しに読み込んでみましたが、ちゃんと動きました。

以下のような感じで読み込んで表示します。参考になれば幸いです。

py

1wb = load_workbook('hoge.xlsx') # まずxlsxファイル(book)を読み込む。 2ws = wb['sheet1'] # 次にシートを読み込みます。 3print(ws['B4'].value) # B4セルの情報をコンソールに表示します。

ちなみに、Simple usage — openpyxl 2.2.4 documentationはページの一番上から順番に実行して動くものなので、断片的なコードを一つのコードとして追っていくと、処理が解ると思います :)

投稿2015/07/28 08:44

編集2015/07/29 14:46
manzyun

総合スコア2244

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

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

u_k_statistics

2015/07/29 04:21

manzyunさん回答ありがとうございます。 openpyxlを使おうと思い #!/usr/bin/env python # -*- coding: utf-8 -*- import glob from openpyxl import load_workbook files = glob.glob('/Users/xxx/xxxx/xxxxx/xxxxxx/*.xlsx') wb = load_workbook(filename=files[0]) ws = wb.active x = ws.rows for u in x: for v in u: print v.value + '\t', としたのですが実行結果が File "excel_openpyxl.py", line 15, in <module> ws = wb.active AttributeError: 'Workbook' object has no attribute 'active' と出てしまいました。 どうしたらいいのでしょうか? 宜しくお願いします><
u_k_statistics

2015/07/29 07:43

追記失礼します。 macで作業しているのですがひょっとしてmacでは無理なのでしょうか?
manzyun

2015/07/31 05:27

回答を加筆しました。よろしければごらんください。
u_k_statistics

2015/08/03 03:27

manzyunさんありがとうございます。 おかげさまでデータを取得することができました。 追加で質問で申し訳ないのですが、openpyxlでエクセルの列数や行数の取得方法を教えていただきたいです。xlrdだとncolsなどがあるのですがopenpyxlでは見つけられませんでした... 流れとしては、すべてのセルのデータを取得してそれをmysqlに入れたいです。 宜しくお願いします。
manzyun

2015/08/04 13:34

行数ならすぐに求められそうです。Worksheetクラスにmax_rowというメソッドがあるようです。 ただ、列数はアルファベットで返されるので、処理にひと手間加えないと行けなさそうです。 How do I check using openpyxl the number of rows with data in them without scanning all rows within the spreadsheet - Google グループ https://groups.google.com/forum/#!topic/openpyxl-users/fgf_qxW2OhA
u_k_statistics

2015/08/06 06:56

manzyunさん 何度も回答ありがとうございます>< #!/usr/bin/env python # -*- coding: utf-8 -*- import glob from openpyxl import load_workbook from openpyxl.cell import get_column_letter files_p = glob.glob('xxxx/*.xlsx') for i in range(len(files_p)): wb = load_workbook(files_p[i],use_iterators=True) ws = wb['Sheet1'] print ws.max_col のようにして実行すると print ws.max_col AttributeError: 'ReadOnlyWorksheet' object has no attribute 'max_col' と出てしまいます。 しかし、使用しているxlsxファイルはすべての人が読み書きできるようになっています。 なぜこのようなことが起こるのかご存知でしたら宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問