【Python】xlrdの使い方を初心者向けに解説|Excelファイルの読み込みをマスターしよう

はじめに

PythonでExcelファイルからデータを取り込む機会は意外と多いのではないでしょうか。
顧客や取引先がExcel形式でデータを渡してくる場合や、既存のExcelデータを分析用にPythonで扱いたい場合など、Excelを起点とした業務は幅広く存在します。

そんなときに役立つのが xlrd というライブラリです。
このライブラリは、基本的に拡張子が.xlsのファイルの読み込みに対応しており、Excelファイル内のシートやセルを自在に操作できます。
たとえば、売上集計ファイルの特定の列だけを抽出したり、膨大な行数のデータを自動的に処理したりすることが可能です。

一見するとプログラミング初心者の方には難しく感じられるかもしれませんが、使い方のポイントをつかめば、スムーズにデータを取り込む仕組みを作ることができます。
ここでは xlrd の基本的な使い方を紹介しながら、どのような実務で役立つかを具体的に解説していきます。

この記事を読むとわかること

  • PythonとExcelファイルを連携する際に役立つ xlrd の概要
  • 実際に.xlsファイルを読み込むための具体的なコード例
  • 複数のシートを扱う方法や、セルの取得・行列の取得などの操作
  • データを活用する上で押さえておきたい注意点

xlrdとは何か

PythonにはExcelファイルを扱うライブラリが複数あります。
その中で xlrd は、拡張子が.xlsのファイル読み込みに特化しています。
つまり、Excel 97-2003形式と呼ばれるファイルを主に対象にしており、最新の.xlsxファイルには対応していません。

実務で扱うExcelファイルは.xlsx形式が増えていますが、相手先が依然として.xlsファイルを使っている場合もあります。
そのため、顧客や社内の部署から.xlsファイルを渡されたときにすぐに対応できるようにしておくと便利です。

また、xlrd はシンプルなAPI設計になっていて、特別な設定をしなくても手軽にExcelデータを読み込めます。
行数や列数が多くても、Pythonのループなどを使って自動化することができるため、手動でExcelを開いてコピペする手間を大きく減らせます。

実務での主な活用シーン

実際に xlrd が役立つのは、どのようなシーンでしょうか。
ここではいくつかの例を挙げてみます。

1. 定期レポートの自動集計

ある部署から定期的に.xls形式のレポートを受け取る場合、同じような場所からデータを拾って集計しなければいけないことがあります。
毎回手作業でコピー&ペーストするのは面倒ですが、Pythonスクリプトを組んで自動化すれば、時間を大幅に節約できます。

2. 複数ファイルの一括処理

複数の.xlsファイルを一度に処理し、それぞれのデータをまとめたいケースがあります。
手動では確認作業が増えてミスも起こりがちですが、xlrd を使ったプログラムならファイルをループ処理しながら、一括で必要な情報だけ取得できます。

3. データ分析の前処理

Excelに入ったデータを統計分析や機械学習に利用したい場合、そのままExcelで作業するよりはPythonへ取り込んで処理した方が柔軟です。
xlrd でExcelの内容を読み込み、不要な列を削除したり型変換を行ってから分析ツールにかけるといった流れもスムーズになります。

このように、xlrd は「.xlsファイルのデータを取り込む」という特定の用途に対して頼れるライブラリといえるでしょう。
ここからは具体的なコード例を交えながら、初心者向けに説明していきます。

xlrdの導入と基本的な使い方

ここでは、Pythonの環境にxlrdがインストールされている前提で話を進めます。
まだインストールされていない場合は、コマンドラインから pip install xlrd を実行すると簡単に導入できます。

Excelファイルを読み込む流れ

xlrd でExcelファイル(.xls)を操作する基本的な手順は以下のとおりです。

  1. xlrd.open_workbook("ファイル名.xls") でワークブックを開く
  2. 開いたワークブックからシートを取得する
  3. シート内のセル情報を取得する

流れとしては非常にシンプルですが、シートの名前で取得する方法やインデックスで取得する方法など、いくつか使い方があります。

ワークブックとシートを取得するコード例

まずは、単一のシートからデータを読み込む最も基本的なコード例を見てみましょう。

import xlrd

def read_excel_data(file_path):
    # ワークブックを開く
    workbook = xlrd.open_workbook(file_path)

    # シートをインデックスから取得(最初のシートを取得)
    sheet = workbook.sheet_by_index(0)

    # 行数や列数を確認
    row_count = sheet.nrows
    col_count = sheet.ncols

    # 最初の行だけを出力してみる
    first_row_values = sheet.row_values(0)
    print("一行目のセル値:", first_row_values)

    # 任意のセルを取得
    cell_value = sheet.cell_value(1, 2)  # 2行目の3列目
    print("2行目・3列目のセル:", cell_value)

# 実行例
read_excel_data("sample.xls")

上記のコード例では、open_workbook 関数でExcelファイルを読み込み、sheet_by_index(0) で先頭のシートにアクセスしています。
sheet.nrows はシート内の総行数を返し、sheet.ncols は総列数を返します。
初心者の方はまず、このように行数や列数を取得して「どれだけデータがあるのか」を把握するところから始めると理解しやすいでしょう。

複数のシートを扱う方法

業務で使うExcelファイルは、複数のシートに分かれていることも少なくありません。
たとえば、月ごとにシートが分かれていたり、異なるカテゴリごとにシートが用意されている場合があります。

シートの名前で取得

シートをインデックスではなく、名前で指定する方法もあります。
下記のように sheet_by_name("シート名") を使うと分かりやすいです。

import xlrd

def read_multiple_sheets(file_path):
    # ワークブックを開く
    workbook = xlrd.open_workbook(file_path)

    # シート名を指定して取得
    # たとえば「January」という名前のシートがあると仮定
    january_sheet = workbook.sheet_by_name("January")
    february_sheet = workbook.sheet_by_name("February")

    # それぞれのシートから一部のデータを取得
    jan_value = january_sheet.cell_value(0, 0)
    feb_value = february_sheet.cell_value(0, 0)

    print("Januaryシートの一つ目のセル:", jan_value)
    print("Februaryシートの一つ目のセル:", feb_value)

このようにシート名を直接指定できるのは、シートの順番が変わっても影響を受けにくいのが利点です。
月別シートや部門別シートなど、名前が決まっている場合はこちらの方法が便利でしょう。

すべてのシートをループ処理する

ファイル内のすべてのシートを走査し、まとめて処理したいケースもあります。
その場合は、以下のようにループで取得できます。

import xlrd

def read_all_sheets(file_path):
    workbook = xlrd.open_workbook(file_path)
    sheet_names = workbook.sheet_names()  # 全シート名のリストを取得

    for name in sheet_names:
        sheet = workbook.sheet_by_name(name)
        print(f"シート名: {name}, 行数: {sheet.nrows}, 列数: {sheet.ncols}")

上記のように、workbook.sheet_names() で全シートの名前を取得し、順番に処理することで、一括でデータを取り出すことができます。
たとえば年間の売上報告ファイルで、12個のシートに分かれた状態でも一気に処理できるわけです。

セルからデータを取り出す方法

Excelのセルは文字列、数値、日付などさまざまなデータを含むことがあります。
xlrd を使う場合でも、セルの値はまとめて取得可能です。

行や列をまとめて取得する

特定の行や列だけまとめて取りたいときは、row_values(行番号)col_values(列番号) を使います。
次のようにすると、1行分や1列分をまとめてリストとして扱えます。

import xlrd

def get_row_and_column(file_path):
    workbook = xlrd.open_workbook(file_path)
    sheet = workbook.sheet_by_index(0)

    # 2行目をすべて取得
    second_row = sheet.row_values(1)  # インデックスは0から
    print("2行目のデータ:", second_row)

    # 3列目をすべて取得
    third_col = sheet.col_values(2)
    print("3列目のデータ:", third_col)

読み込んだデータをPythonのリストとして受け取ることができるので、そのままループ処理や条件分岐に応用できます。
たとえば売上データを数値として扱いたい場合は、そのまま集計や統計処理へと進められます。

セルの型に注意する

Excelのセルには文字列・数値などの型があります。
xlrd で読み込んだ際にもデータ型が混在する場合があるので、文字列として扱うのか、数値として扱うのか注意が必要です。

たとえば売上金額を文字列のまま計算しようとするとエラーが出てしまうことがあります。
取り込み後に型を変換するなどの工程が必要なときは、あらかじめセルのデータ型を確認すると良いでしょう。

データを抽出・加工する実務的な例

単純にセルの値を取得するだけではなく、実務では「特定の列だけピックアップしてまとめる」「条件に合致する行だけ抜き出す」といった操作をしたくなるものです。
ここではイメージをつかむために簡単な例を紹介します。

import xlrd

def filter_sales_data(file_path, min_sales):
    workbook = xlrd.open_workbook(file_path)
    sheet = workbook.sheet_by_index(0)

    # ヘッダーを飛ばしてデータ行を処理すると仮定
    for row_index in range(1, sheet.nrows):
        # 例えば1列目に商品名、2列目に売上が入っているケース
        product_name = sheet.cell_value(row_index, 0)
        sales_amount = sheet.cell_value(row_index, 1)

        # 売上が指定した数値以上なら表示
        if isinstance(sales_amount, (int, float)) and sales_amount >= min_sales:
            print(f"{product_name} : {sales_amount}円以上")

このようなスクリプトを用意しておけば、大量のExcel行の中から必要な情報だけ抽出できます。
たとえば売上金額が一定の値を超えている商品だけをピックアップするなど、実務でよくある要件を効率的に処理できるでしょう。

xlsxファイルを読み込みたい場合は?

xlrd は現時点で.xlsファイルを扱うことを前提としています。
.xlsx形式のファイルが多い職場やプロジェクトでは、別のライブラリを検討した方が手っ取り早いかもしれません。
ただし、社内外の都合で.xls形式を使い続けている場合は xlrd が役立ちます。

もし.xlsxファイルを読み込む必要がある場合、別のライブラリも検討してください。xlsファイルを扱うケースがメインならxlrdでも十分です。

実務で気をつけたいポイント

実際に xlrd を使ってExcelファイルを読み込む際、いくつか注意点があります。
特に大規模なデータを扱う場合や複数のファイルを一括処理する場合に気をつけたいポイントを見てみましょう。

データのクレンジング

Excelのセルには意図しない改行が含まれていたり、数値だけのはずが文字列が混ざっていたりすることがあります。
こうしたデータのゆらぎをそのまま扱うと、期待する計算ができなくなります。
事前に不要な文字や空白を削除する、型をチェックするなどのクレンジング処理を挟むのがおすすめです。

メモリ使用量

Excelファイルのサイズが大きい場合、読み込みにも時間がかかり、メモリを多く消費することがあります。
数万行クラスであれば通常のPCでも処理可能ですが、何十万行以上など極端に大きいファイルだとメモリ負荷に注意が必要です。
そのような場合はファイルを分割したり、より高速に動作する手法を検討したりするのも方法です。

シートのレイアウト変化

実務ではExcelファイルのレイアウトが予告なく変更されることがあります。
列の順序が変わったり、不要な行が挿入されたりするケースもあります。
シートや列をインデックスで指定しているコードが動かなくなる可能性があるので、シート名や特定の見出し文字を頼りに情報を取得する方が安全な場面もあるでしょう。

シートのレイアウト変更は発生しやすいトラブルの一つです。インデックスの指定だけに頼らず、シート名や見出しの文字を確認するなど、保守しやすいコード設計を心がけると混乱を減らせます。

まとめ

ここまで、PythonでExcelファイル(.xls形式)を読み込むためのライブラリ xlrd を中心に、実務での活用シーンやコード例を紹介しました。
顧客や社内から.xlsファイルを受け取る場面が多い場合、手動で行っていた作業を自動化できるチャンスがたくさんあるはずです。

xlrd はシンプルかつ直感的に扱うことができ、Python初心者の方でも比較的取り組みやすいライブラリです。
一方で、.xlsxファイルには非対応のため、実際の業務要件と照らし合わせることが大切になります。

Excelデータの読み込みを自動化すると、手作業のミスを減らせるだけでなく、作業時間の削減にもつながります。
まずは小さなサンプルから始めて、少しずつ実際の業務に組み込むとスムーズに活用できるでしょう。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。