Skip to content

[Python] 使用 xlrd 套件讀取 XLS 檔

Last Updated on 2021-04-13 by Clay

我每天都會碰到問題,想辦法使用工具解決問題已經變成了我日常生活的一部分。過去我在讀取 Excel 檔案時永遠都是挑 CSV 檔 (逗號分隔檔)來處理,就像柿子挑軟的捏一樣,我知道我總有一天會碰上難題 —— 不是只要讀進來想怎麼處理都可以的 CSV、而是 Excel 的特定格式 XLS。

天哪,而且那還不是單純的一頁的 XLS。如果是,我早就直接轉 CSV 了。

有很多也的工作表,或者你習慣說活頁簿。想想真的是超可怕的。

所幸,我很快地找到了 xlrd,是 Python 中的一個第三方模組,可以方便地讀取 XLS 檔。那麼以下,就讓我簡單地做個心得筆記吧!


xlrd 簡單介紹

xlrd 就如同上述,是個第三方模組,我們若是第一次使用,必須要用以下的指令先行下載。

pip3 install xlrd

安裝好後,我們便可以開始使用程式讀取我們的 XLS 檔啦!

假設我們有個這樣的的 XLS 檔。

工作表1。

工作表2

然後,以下便是 xlrd 的程式筆記:

# -*- coding: utf-8 -*-
import xlrd

# Load xls file
data = xlrd.open_workbook('test.xlsx')

for n in range(len(data.sheet_names())):
    print(n)


Output:

0
1

首先,我們 import xlrd 這個模組。然後,我們使用 open_workbook() 這個 function 打開我們測試的 xlsx 檔。

data.sheet_names() 可以顯示出我們所有工作表的名稱。在這裡我只計算工作表的 index,因為我後面打算直接使用工作表的 index 來讀取資料。

# -*- coding: utf-8 -*-
import xlrd

# Load xls file
data = xlrd.open_workbook('test.xlsx')

for n in range(len(data.sheet_names())):
    table = data.sheets()[n]

    for i in range(table.nrows):
        print('Page {}: '.format(n), end='')
        print(table.row_values(i))


Output:

Page 0: ['昨天', '今天', '明天']
Page 0: ['下雨', '晴天', '颱風']
Page 1: ['過去', '現在', '未來']
Page 1: ['15年', '1年', '100年']

data.sheets()[n] 可以指定我們要讀第幾個工作表,在這裡 n 便是我工作表的 index。

table.nrows 可以顯示我列數有幾列,在這裡我用 row_values(i) 將每一張工作表、每一列 print 出來。

當然,你要一行行地印出來也是可行的。

# -*- coding: utf-8 -*-
import xlrd

# Load xls file
data = xlrd.open_workbook('test.xlsx')

for n in range(len(data.sheet_names())):
    table = data.sheets()[n]

    for i in range(table.ncols):
        print('Page {}: '.format(n), end='')
        print(table.col_values(i))


Output:

Page 0: ['昨天', '下雨']
Page 0: ['今天', '晴天']
Page 0: ['明天', '颱風']
Page 1: ['過去', '15年']
Page 1: ['現在', '1年']
Page 1: ['未來', '100年']

這樣,我們就大功告成了!基本讀取資料再也難不倒我們了!

Leave a Reply取消回覆

Exit mobile version