前提・実現したいこと
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')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。