Python操作Excel讀寫--xlrd模塊


xlrd模塊實現對excel文件內容讀取 支持xls和xlsx格式 (最新版好像不支持xlsx)

1、以下表來舉例說明 [0,0]

2、安裝並導入xlrd模塊
在PyCharm終端輸入: pip install xlrd
導入:import xlrd

3、打開Excel文件返回數據
wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\測試一下.xlsx')

4、通過以下3種方法獲取工作表
table = wb.sheets()[0] # 通過索引順序獲取
table = wb.sheet_by_index(0) # 通過索引順序獲取
table = wb.sheet_by_name(u'表1') # 通過名稱獲取
tables = wb.sheet_names() # 以列表形式返回wb所有的表 ['表1', '表2', '表3']

5、獲取table中的有效行數
row = table.nrows
print(row) # 6

6、獲取table中的有效列數
col = table.ncols
print(col) # 5

7、獲取一行中有多少列數據
num = table.row_len(0)
print(num) # 5

8、獲取整行的值(數組)
v = table.row_values(0) # ['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']
v = table.row_values(1) # ['Lilei', 20.0, 'A00001', 13800138001.0, 'China']

9、獲取整列的值(數組)
v = table.col_values(0) # ['學號', 'B00001', 'B00002', 'B00003', 'B00004', 'B00005', 'B00006', 'B00007']
v = table.col_values(1) # ['姓名', '張1', '張2', '張3', '張4', '張5', '張6', '張7']

10、循環行列表數據

for i in range(row):
    print(table.row_values(i))

['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']
['Lilei', 20.0, 'A00001', 13800138001.0, 'China']
['Hanmeimei', 18.0, 'A00002', 13800138002.0, 'Americe']
['Jony', 21.0, 'A00003', 13800138003.0, 'Japan']
['Herry', 25.0, 'A00004', 13800138004.0, 'Aussie']
['NoNy', 27.0, 'A00005', 13800138005.0, 'Italy']

11、讀取指定單元格的值
cell = table.cell(0,4).value # COUNTRY
cell = table.cell(3,2).value # A00003
cell = table.cell_value(rowx=3,colx=4) # Japan

12、使用行列索引讀取具體單元格的值
cell = table.row(0)[0].value # NAME
cell = table.row(1)[2].value # A00001

13、獲取單元格的數據類型
python讀取excel中單元格的內容返回的有5種類型。ctype: 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error
value = table.cell_type(rowx=0, colx=1) # 1

14、以鍵值對形勢讀取表單信息

點擊查看代碼
import xlrd
from xlrd import xldate_as_tuple
import datetime
'''
xlrd中單元格的數據類型
數字一律按浮點型輸出,日期輸出成一串小數,布爾型輸出0或1,所以我們必須在程序中做判斷處理轉換
成我們想要的數據類型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
'''
class ExcelData():
    def __init__(self):
        self.wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\測試一下.xlsx')
        self.table2 = self.wb.sheet_by_name('表2')
        self.keys = self.table2.row_values(0)

        self.rowNum = self.table2.nrows
        self.colNum = self.table2.ncols

    def readExcel(self):

        datas = []
        for i in range(1, self.rowNum):
            sheet_data = {}
            for j in range(self.colNum):
                # 獲取單元格數據類型
                c_type = self.table2.cell(i,j).ctype
                # 獲取單元格數據
                c_cell = self.table2.cell_value(i, j)
                if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                    c_cell = int(c_cell)
                elif c_type == 3:
                    # 轉成datetime對象
                    date = datetime.datetime(*xldate_as_tuple(c_cell,0))
                    c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
                elif c_type == 4:
                    c_cell = True if c_cell == 1 else False

                sheet_data[self.keys[j]] = c_cell
            datas.append(sheet_data)
        return datas

if __name__ == "__main__":
    get_data = ExcelData()
    datas = get_data.readExcel()
    print(datas)

執行結果:
[
{'學號': 'B00001', '姓名': '張1', '年齡': 18, '專業': '語文', '考試時間': '2019/18/06 00:00:00'},
{'學號': 'B00002', '姓名': '張2', '年齡': 19, '專業': '數學', '考試時間': '2019/19/06 00:00:00'},
{'學號': 'B00003', '姓名': '張3', '年齡': 20, '專業': '英語', '考試時間': '2019/20/06 00:00:00'},
{'學號': 'B00004', '姓名': '張4', '年齡': 21, '專業': '物理', '考試時間': '2019/21/06 00:00:00'},
{'學號': 'B00005', '姓名': '張5', '年齡': 22, '專業': '化學', '考試時間': '2019/22/06 00:00:00'},
{'學號': 'B00006', '姓名': '張6', '年齡': 23, '專業': '生物', '考試時間': '2019/23/06 00:00:00'},
{'學號': 'B00007', '姓名': '張7', '年齡': 24, '專業': '歷史', '考試時間': '2019/24/06 00:00:00'}
]

總結:
在執行時如果提示 xlrd.biffh.XLRDError: Excel xlsx file; not supported
說明 xlrd更新到了2.0.1版本,只支持.xls文件
可以安裝舊版xlrd
pip uninstall xlrd
pip install xlrd==1.2.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM