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

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

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

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

Q&A

解決済

1回答

2729閲覧

ディレクトリ内のxlsxファイルを別のxlsxファイルに書き出したい

sirokuma405

総合スコア11

Python 2.7

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

0グッド

0クリップ

投稿2018/01/26 03:56

前提・実現したいこと

python2.7を使って,ディレクトリ内の全てのxlsxファイル(例:180105-A.xlsx)のセル値を読み込み,別のxlsxファイル(sample.xls)に書き出そうとしています.
フィルの読み込みにはxlrd,書き込みにはxlwtを使用していて,最終行のsave("sample.xls")でエラーが出てしまいました.
どのように解決したら良いでしょうか?

発生している問題・エラーメッセージ

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

該当のソースコード

Python2.7

1# -*- coding: utf-8 -*- 2 3import xlrd 4import xlwt 5import sys 6import os 7 8# ディレクトリ内のファイル名を取得 9print "---ディレクトリ内のファイル名---" 10files = os.listdir(os.getcwd()) 11test = [] 12for i in files: # xlsxのファイル名のみを取得 13 if(i[-5:] == ".xlsx" and not(i[:2] == "~$")): 14 test.append(i) 15print test 16 17book2 = xlwt.Workbook() 18 19# Excel ファイル(xlsm)を読み込み 20print "---Excel ファイル(xlsm)を読み込み---" 21for dataFileName in test: 22 print dataFileName 23 book = xlrd.open_workbook(dataFileName) 24 25 # ブック内のシート数を取得 26 num_of_worksheets = book.nsheets 27 28 # 全シートの名前を取得 29 sheet_names = book.sheet_names() 30 31 # ディレクトリ内のファイルを統合 32 for i in (sheet_names): # シートの作成 33 a = dataFileName[:8] + " " +i.encode("utf8")[-2:]# シート名の決定 34 a = a.decode("utf8") 35 newSheet = book2.add_sheet(a) 36 37 sheet = book.sheet_by_name(i) # シートを開く 38 for j in range(7): 39 for k, ele in enumerate(sheet.col(j)): 40 a = ele.value 41 if type(a) == float: 42 pass 43 else: 44 a = a.encode("utf8") 45 newSheet.write(k, j, a) 46book2.save('sample.xls')

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

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

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

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

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

guest

回答1

0

自己解決

if type(a) == float: pass else: a = a.encode("utf8") newSheet.write(k, j, a)

これを

if type(a) == float: pass else: a = a.decode("utf8") newSheet.write(k, j, a)

こうすればできました

投稿2018/01/26 04:14

sirokuma405

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問