xlrdを使った、空白セルかを判定するスクリプトをご紹介しました。
セルに入力されているデータによって、Sheet.cell_typeメソッドやCell.ctype属性がどのような値を返すのか、xlrdでデータ種別がどう扱われるのか確認しておくほうが良さそうに感じます。
ctypeを確認するサンプルスクリプト
以下のスクリプトを実行すると、Cドライブtempフォルダーに存在するsample_cell_type.xlsxの先頭シートに存在するセルの、ctypeとvalueがprintされます。
bk = xlrd.open_workbook(r'C:\temp\sample_cell_type.xlsx')
sh = bk.sheet_by_index(0)
for row in range(sh.nrows):
for col in range(sh.ncols):
print(row+1, '行', col+1, '列目は、', sep='', end='')
cell = sh.cell(row, col)
print('ctype=', cell.ctype, end=' ')
if cell.ctype == xlrd.XL_CELL_EMPTY:
print('(空白セル)')
else:
print(cell.value)
サンプルスクリプトの実行結果
C:\temp\sample_cell_type.xlsxの先頭シートが以下のような状態のときに、
上記のスクリプトを実行すると、以下のように出力されます。
1行1列目は、ctype=0 value=(空白セル)
2行1列目は、ctype=1 value=イロハ
3行1列目は、ctype=2 value=123.0
4行1列目は、ctype=3 value=43972.0
5行1列目は、ctype=3 value=43972.65633171296
6行1列目は、ctype=4 value=1
7行1列目は、ctype=5 value=42
「ctype=」に続いてデータ種別を表す、
0 (XL_CELL_EMPTY)
1 (XL_CELL_TEXT)
2 (XL_CELL_NUMBER)
3 (XL_CELL_DATE)
4 (XL_CELL_BOOLEAN)
5 (XL_CELL_ERROR)
といった数値が表示され、「value=」に続いてデータが出力されています。
整数(A3セル・3行1列目)が入力されていても、時間データのない日付データ(A4セル・4行1列目)であっても、floatが出力されています。
A7列にはNA関数を使って#N/Aエラーを発生させていますが、ctypeはエラーを表す5(XL_CELL_ERROR)を返しています。
サンプルスクリプトで行っている処理について
Sheet.nrows・Sheet.ncolsで取得したデータの入力されている全セルに対してループを回して、
for row in range(sh.nrows):
for col in range(sh.ncols):
まず「n行m列目は、」と出力を行います。
print(row+1,'行', col+1,'列目は', end=' ')
つづいて、変数cellにCellを代入して、
cell = sh.cell(row, col)
ctypeを出力します。
print('ctype=', cell.ctype, end=' ')
空白セルだった場合には、
if cell.ctype == xlrd.XL_CELL_EMPTY:
「(空白セル)」という文字列を、
print('(空白セル)')
空白セルでなかった場合には、
else:
データを出力しています。
print(cell.value)
最終更新日時:2020-05-21 16:18