使用openpyxl读取数据

参考一篇写的比较好的博客:https://www.cnblogs.com/sun-haiyu/p/7096423.html

为了读取数据,我们首先先写一个excel,写的时候,每一行添加随机数10个,从0~9,并且使用红色加粗标记大于5的数字,实现代码如下

import random
from openpyxl import Workbook,load_workbook
from openpyxl.styles import Font,colors

def make_random(limit,rand_range):
    '''
    在limit范围内生成指定数量的随机数
    '''
    return [random.randrange(rand_range) for i in range(limit)]

def make_alpha_dict():
    '''
    生成26个字母与数字的对应
    '''
    foo_dict = {}
    for i in range(26):
        foo_dict[i+1] = chr(97+i)
    return foo_dict

#写入一个excel
book = Workbook()
sheet1 = book.active
sheet1.title = 'test'

alpha_dict = make_alpha_dict() 
for i in range(10):
    random_list= list(make_random(10,10))
    sheet1.append(random_list)
    mark_index = [ i for i,j in enumerate(random_list) if j > 5]
    for idx in mark_index:
        sheet1['{}{}'.format(alpha_dict[idx+1],i+1)].font = Font(color=colors.RED,bold=True)
        #易错点:在excel表格中行是从1开始的,而不是从0开始的
sheet2 = book.create_sheet(title='sheet2')
book.save('test.xlsx')

以上代码存在一个漏洞,就是那个生成26个字母与数字对应的函数,因为在excel表格中,超过26列之后将以AA开始,因此最好的解决办法是导入 如下函数

from openpyxl.utils import get_column_letter

print(get_column_letter(1)) # A
print(get_column_letter(27) # AA


与之相反的是从字符转换为数字

from openpyxl.utils import column_index_from_string

column_index_from_string('D') # 4

接下来是读取这个写好的workbook

book = load_workbook('test.xlsx')
sheet_names = book.get_sheet_names()
print('sheet_names:{}'.format(sheet_names))
print(book['test'])
sheet1 = book[sheet_names[0]]
print(sheet1.title)
for row in sheet1.rows:
    print(list(row))
    print([cell.value for cell in row])
for col in sheet1.columns:
    print(list(col))
#这里的cell是从1开始的,以下代码代表A1
print(sheet1.cell(row=1,column=1))

读取的时候使用load_workbook(),可以通过指定read_only使其仅能被读取,不能被修改。否则,默认情况下为读写模式

需要注意的是,在只读模式下将不能使用sheet.columns属性

AttributeError: 'ReadOnlyWorksheet' object has no attribute 'columns'

读取具体某个sheet的时候,使用book['sheetname']的方式来获取,不知道sheetname的情况下,使用book.sheetnames属性来获取一个列表因此可以使用book[book.sheetnames[0]]来获取第一个sheet。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章