openpyxl¶
https://openpyxl.readthedocs.io/en/default/
wb = openpyxl.load_workbook(filename=file_path)
# 所有工作簿名字
# wsl = wb.sheetnames
# 通过名字获取工作簿
# ws1 = wb.get_sheet_by_name('试用期')
# 工作簿最大多少行, 最大多少列 max_column, max_row
# openpyxl 索引从 1 开始, 所以所有行索引为, (1, max_row+1)
# print(ws1.max_column)
# 打印某个单元格的值
# print(ws1.cell(row=1, column=1).value)
读取cell中的颜色¶
ws1 = wb.get_sheet_by_name('试用期')
c = ws1.cell(row=1,column=1)
fill = c.fill
front = c.font
print(c.value)
print(fill.start_color.rgb)
print(front.color.rgb)
服务器名称
FF00B050
FFFFFF00
写 excel¶
https://www.cnblogs.com/sun-haiyu/p/7096423.html
append方法¶
可以一次添加多行数据,从第一行空白行开始(下面都是空白行)写入。
# 添加一行
row = [1 ,2, 3, 4, 5]
sheet.append(row)
# 添加多行
rows = [
['Number', 'data1', 'data2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
append按行写入, 按列写入只需要将矩阵转置
list(zip(*rows))
# out
[('Number', 2, 3, 4, 5, 6, 7),
('data1', 40, 40, 50, 30, 25, 50),
('data2', 30, 25, 30, 10, 5, 10)]
示例¶
def merge_sheet(wb):
"""
合并所有工作簿为一个 RecordCollection 对象
:param wb:
:return:
"""
records_list = []
for sheet_name in wb.sheetnames:
row_gen = single_sheet(wb=wb, sheet_name=sheet_name)
tmp_res = RecordCollection(row_gen)
tmp_res.all()
records_list.append(tmp_res)
# 合并工作簿为一个 RecordCollection 对象, 需要定义 __add__ 方法
results = reduce(lambda x, y: x + y, records_list)
return results
def single_sheet(wb, sheet_name):
"""
返回单张工作簿的所有数据
:param wb: workbook
:param sheet_name: 工作簿名字
:return: 返回单张工作簿的所有数据
"""
headers = {
'姓名': 'ConsumerName',
'卡号': 'CardNO',
'部门': 'GroupName',
'权限': 'DoorName'
}
sheet = wb.get_sheet_by_name(sheet_name)
# 从 1 开始, 如果不要表头, 从 2 行开始
sheet_header = []
for column in range(1, sheet.max_column + 1):
header = sheet.cell(row=1, column=column).value
if header in headers:
sheet_header.append(headers[header])
else:
raise ValueError('工作簿 <%s> 表头错误' % sheet)
# print(sheet_header)
user_gen = ([sheet.cell(row=row, column=column).value for column in range(1, sheet.max_column + 1)]
for row in range(2, sheet.max_row + 1))
return (Record(sheet_header, list(row)) for row in user_gen)
# return sheet_header,l