【Python开发】Excel的操作之——读取

2018-08-21 05:41:28来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

主要思路参考这篇博客的内容,把地址贴上:

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 pause
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 
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

运行结果如下,比昨天的好看多了:

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:面向对象(一)——类与对象介绍

下一篇:python字符串函数