主要思路參考這篇博客的內容,把地址貼上: http://www.cnblogs.com/zhoujie/p/python18.html 下麵貼上我自己的代碼 讀取excel數據的demo代碼如下: 1 def read_excel_demo(): 2 # 打開文件 3 workbook = xlrd ...
主要思路參考這篇博客的內容,把地址貼上:
http://www.cnblogs.com/zhoujie/p/python18.html
下麵貼上我自己的代碼
讀取excel數據的demo代碼如下:
1 def read_excel_demo(): 2 # 打開文件 3 workbook = xlrd.open_workbook(r'C:\Users\wxz\Desktop\2018年信用卡花費(Kevin).xlsx') 4 # 獲取所有sheet 5 print('列印所有sheet表名稱:',workbook.sheet_names()) 6 sheet1_name = workbook.sheet_names()[0] 7 sheet2_name = workbook.sheet_names()[1] 8 # print(sheet1_name) 9 10 # 根據sheet索引或者名稱獲取sheet內容 11 sheet1 = workbook.sheet_by_index(0) 12 # TODO 問題 13 # sheet2 = workbook.sheet_by_name('sheet1_name') 14 # print(sheet2) 15 16 # sheet的名稱,行數,列數 17 print(sheet1.name, sheet1.nrows, sheet1.ncols) 18 19 # 獲取整行和整列的值(數組) 20 rows = sheet1.row_values(0) 21 cols = sheet1.col_values(0) 22 print(rows) 23 print(cols) 24 25 # 獲取單元格內容 26 print(sheet1.cell(0, 0).value) 27 print(sheet1.cell_value(0, 0)) 28 print(sheet1.row(0)[0].value) 29 30 # 獲取單元格內容的數據類型 ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error 31 print(sheet1.cell(0, 0).ctype) 32 33 # 獲取日期 34 if sheet1.cell(1, 3).ctype == 3: 35 datetime = xlrd.xldate_as_datetime(sheet1.cell(1, 3).value, workbook.datemode) 36 print(datetime.date())View Code
自己寫的實際調用函數如下:
1 def read_excel(): 2 workbook = xlrd.open_workbook(r'C:\Users\wxz\Desktop\2018年信用卡花費(Kevin).xlsx') 3 sheet_name = workbook.sheet_names() # 獲取所有sheet表名稱 4 sheet_length = sheet_name.__len__() # 獲取sheet表長度 5 print('已讀取Excel所有sheet表名稱:') 6 7 sheet_num = 0 8 for name in sheet_name: 9 print(str([sheet_num]) + ':' + name) 10 sheet_num = sheet_num + 1 11 12 while True: 13 sheet_index = int(input('\n請輸入需要列印的sheet表序號:')) 14 if sheet_index < sheet_length: 15 print('\n正在列印《' + workbook.sheet_names()[sheet_index] + '》的內容……\n') 16 17 current_sheet = workbook.sheet_by_index(sheet_index) 18 nrows = current_sheet.nrows 19 for n in range(nrows): 20 print(current_sheet.row_values(n)) 21 22 print('\n共有' + str(nrows) + '行,已全部列印完畢\n') 23 break; 24 else: 25 print('錯誤提示:sheet表序號超出最大長度,請重新輸入') 26 27 if __name__ == '__main__': 28 read_excel()View Code
另外我採用的是bat批處理文件調用py文件,bat代碼如下:
1 @echo off 2 3 echo 開始運行ExcelRead程式 4 echo\ 5 6 python G:\PycharmProjects\【180817】ExcelOperation\ExcelRead.py 7 8 pauseView Code
執行效果如下:
下一步計劃需要把讀出來的數據按表排列………(未完待續)
今日優化代碼:
1 def read_excel(): 2 workbook = xlrd.open_workbook(r'C:\Users\wxz\Desktop\2018年信用卡花費(Kevin).xlsx') 3 sheet_name = workbook.sheet_names() # 獲取所有sheet表名稱 4 sheet_length = sheet_name.__len__() # 獲取sheet表長度 5 print('已讀取Excel所有sheet表名稱:') 6 7 sheet_num = 0 8 for name in sheet_name: 9 print(str([sheet_num]) + ':' + name) 10 sheet_num = sheet_num + 1 11 12 while True: 13 sheet_index = int(input('\n請輸入需要列印的sheet表序號:')) 14 if sheet_index < sheet_length: 15 print('\n正在列印《' + workbook.sheet_names()[sheet_index] + '》的內容……\n') 16 17 current_sheet = workbook.sheet_by_index(sheet_index) 18 nrows = current_sheet.nrows # 獲取當前列表的行數 19 20 for n in range(nrows): 21 sheet_list = current_sheet.row_values(n) # 讀取的excelsheet無法修改(只讀),添加list轉換 22 23 # 整理數據表,建立表頭,之後增加 24 if n == 0: # 輸出表頭 25 table = PrettyTable(sheet_list) 26 else: # 輸出內容 27 # 項目內容判斷 28 if sheet_list[1] == "": 29 print('提示:第' + str(n) + '行未填入項目內容!') 30 31 # 金額內容判斷 32 if sheet_list[2] == "": 33 print('提示:第' + str(n) + '行未填入金額!') 34 35 # 日期內容判斷 36 if sheet_list[3] == "": 37 print('提示:第' + str(n) + '行未填入日期!') 38 else: 39 # 日期格式判斷 40 if type(sheet_list[3] == float) and type(sheet_list[3]) != str: #時間轉換 41 datetime = xlrd.xldate_as_datetime(current_sheet.cell(n,3).value,workbook.datemode) 42 sheet_list[3] = datetime.date() 43 else: 44 sheet_list[3] = '' 45 print('提示:第' + str(n) + '行未正確填入日期,取消顯示!') 46 47 table.add_row(sheet_list) 48 49 print('') # 空一行 50 print(table) # 列印最終表格 51 52 print('\n共有' + str(nrows) + '行,已全部列印完畢\n') 53 break; 54 else: 55 print('錯誤提示:sheet表序號超出最大長度,請重新輸入')View Code
運行結果如下,比昨天的好看多了: