

### 目標

「売り上げデータ.xlsx」というExcelブックを読み込む  
（このブックには「4月売り上げ」「5月売り上げ」「6月売り上げ」の3つのシートがある）

  1. openpyxl モジュールの読み込み（インポート）  
プログラムの一行目に `import openpyxl` を入力

  2. ブックの読み込み  
二行目に `wb = openpyxl.load_workbook('売り上げデータ.xlsx')` を入力

  3. 実行  
三行目に `print(wb.sheetnames)` を入力し、保存してから、実行すると、`['4月売り上げ','5月売り上げ','6月売り上げ']`
という実行結果になる

### 実際の結果

二行目のコードを入力した時点でエラーメッセージが発生する

[code]

    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        wb = openpyxl.load_workbook('売り上げデータ.xlsx')
      File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
        reader = ExcelReader(filename, read_only, keep_vba,
      File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
        self.archive = _validate_archive(fn)
      File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
        archive = ZipFile(filename, 'r')
      File "C:\Users\Name\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1239, in __init__
        self.fp = io.open(file, filemode)
    FileNotFoundError: [Errno 2] No such file or directory: '売り上げデータ.xlsx'
    
[/code]

### これまでに試したこと

"FileNotFoundError" はブックが見つからないエラーが発生していると考えた。  
そこで、「プログラムのファイル」と「売り上げデータ.xlsx」を同じフォルダーの中に保存した。  
しかし、二行目の時点でエラーメッセージが発生してしまう。

どこに原因があるのでしょうか。ご教示ください。

* * *

# 回答を受けて追記

## 英語ファイル名ならば読み込みができる

IDLE Shell上で実行していたことが原因だったかもしれません。  
IDLE Shellの上部にある`File→New
File`でPythonのFileで実行したところ、初めはエラーが出ましたが、ファイル名を売り上げデータからuriagedataに変更したところ、目標としていた実行結果が出力されました。

## `ModuleNotFoundError`が発生する

2行目でエラーが発生する現象はなくなったのですが、当方が目標として記載したコードやpayanecoさんからいただいた上記のサンプルコードを入力すると共通して以下のエラーが発生してしまいます。

[code]

    Traceback (most recent call last): File "C:\Users\Name\Documents\ExcelPython\ch01\xl_book_load.py", line 1, in <module> import openpyxl ModuleNotFoundError: No module named 'openpyxl'
    
[/code]

おそらく、1行目の import openpyxl に問題があるのではないでしょうか。  
（事前準備としてコマンドプロンプトで py -m pip install openpyxl と入力し、インストールは完了しているはずです）  
なぜ、半角のみのファイル名に変更したら出来たのでしょうか。


CC BY-SA 4.0
2021-07-12T22:19:45.640
78140
2022-04-19T00:01:55.247
2021-07-15T23:21:01.307
9820
34401
question
python excel openpyxl
OpenPyXL でブックを読み込もうとすると FileNotFoundError: [Errno 2] No such file or directory


コメントにあるようにファイルパスのミスタイプが原因として考えられます。

他にはpythonを実行しているカレントディレクトリがpythonファイルと異なる場合はエラーが発生します。  
例えばご質問のコードが`C:\python\test.py`だったとして、コマンドプロンプトなどで下記の処理を実行すると`C:\python\売り上げデータ.xlsx`が存在してもエラーになります。(`C:\売り上げデータ.xlsx`が存在すればエラーになりません)

[code]

    cd /d C:\
    python .\python\test.py
    
[/code]

下記のサンプルコードのようにファイルを作成して読み込めるか試してみてください。  
その後に絶対パスを取得することでExcelファイルの読込先がどこかを確認することができます。  
(カレントディレクトリは[`os.getcwd`](https://docs.python.org/ja/3/library/os.html?highlight=os%20getcwd#os.getcwd)で取得することもできます)

[code]

    import openpyxl
    
    # サンプルExcelファイルを新規作成して保存する
    file_name = "絶対にファイル名がかぶらない.xlsx" 
    
    wb = openpyxl.Workbook()
    for sheet in ['4月売り上げ','5月売り上げ','6月売り上げ']:
        wb.create_sheet(sheet)
    wb.remove(wb['Sheet']) # 新規作成時に自動で作られるシートを削除する
    
    wb.save(file_name)
    
    # 保存したExcelファイルを開きなおす
    wb = openpyxl.load_workbook(file_name)
    print(wb.sheetnames)
    
    # 保存したExcelファイルのフルパスを取得する
    import os
    abs_path = os.path.abspath(file_name)
    print('"{}" を作成しました'.format(abs_path))
    
[/code]

* * *

# 追記質問について

## 英語ファイル名ならば読み込みができる

手元の`Python3.9.6`環境のIDLE Shell上では再現しませんでした。  
下記の手順でも問題は解消しないでしょうか？

  1. `File→New File`でファイルを新規作成
  2. 1行目に`# coding: utf-8`を追記
  3. `'売り上げデータ.xlsx'`を`u'売り上げデータ.xlsx'`に書き換える(`'`の前に`u`を入れる)

## `ModuleNotFoundError`が発生する

実行中の.pyファイル名を`openpyxl.py`に変更していないでしょうか。  
または実行中の.pyファイルが存在するフォルダに`openpyxl.py`を作っていないでしょうか。

うまく行かない場合は、質問文に下記を追記してください。(Python IDLEとpip
install対象のPythonがバージョン違いになっていないか確認する目的です)

  1. IDLE Shellを起動したときに表示される文字列  
`Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit
(AMD64)] on win32`など

  2. コマンドプロンプトで`py --version`を実行した時に表示される文字列


CC BY-SA 4.0
2021-07-13T00:43:26.483
78144
2021-07-15T23:36:40.420
2021-07-15T23:36:40.420
9820
9820
78140
answer


Windowsシリーズではファイルの内容とファイル名(パス名) の文字コードが異なることがあります  
(たぶんディレクトリー/ファイル名 の文字コードは Shift-JIS では？)

一番簡単な対処法は, 日本語のファイル名を作らないことです

ファイルが(何処にあるか)なかなか見つからない場合, このようなコード用意しておくのも手です

[code]

    from pathlib import Path
    
    for f in Path.home().glob('**/*.xlsx'):
        print(f)
    
[/code]

* * *


CC BY-SA 4.0
2021-07-18T04:40:08.523
78264
2021-07-18T04:40:08.523
43025
78140
answer