Python操作电子表格:openpyxl模块,需安装

教程:

# openpyxl
# 一、安装: pip install openpyxl

import openpyxl

# 一、创建工作表


wb = openpyxl.Workbook()
# ws = wb.active  # 创建wb时会自动帮你创建一个Sheet
# 此方法获得默认索引为0的名为Sheet的工作名,除非手动更改
# print(ws) <Worksheet "Sheet">

# 在末尾创建Sheet,(按Sheet1,Sheet2,Sheet3自动命名)
ws0 = wb.create_sheet()

# 在末尾创建mySheet的工作表
ws1 = wb.create_sheet('mySheet')

# 在前端插入mySheet1的工作表
ws2 = wb.create_sheet('mySheet1', 0)

# 在倒数第二个位置插入工作表
ws3 = wb.create_sheet('mySheet2', -1)

# Sheet重命名:
ws3.title = 'mySheet3'



ws0.sheet_properties.tabColor = '1072BA'  # 16进制

# 根据表名获取工作表
ws = wb['Sheet']

print(wb.sheetnames)  # ['mySheet1', 'Sheet', 'Sheet1', 'mySheet3', 'mySheet']


# for ws in wb:
    # print(ws.title) mySheet1...

# 复制工作表
ws4 = wb.copy_worksheet(ws1)
print(wb.sheetnames)  # ['mySheet1', 'Sheet', 'Sheet1', 'mySheet3', 'mySheet', 'mySheet Copy']



# 激活工作表(设置当前工作表)
wb.active = ws
print(wb.active)

# 二、数据操作
# 1、给单元格赋值
c = ws['A4']
# c = 5 不可以用这种方法给cell赋值,因为这不是给单元格赋值,这是在给c赋值
c.value = 1024  #?可以吗?答 ,可以的,
ws['A4'].value = 233 # 答,可以的
ws['A4'] = 4  # 答,可以的
# 也可以用下面的方法赋值
c1 = ws.cell(row=4, column=2, value=10)

# 创建10*10个空的cell,遍历一次就可以创建值为None的Cell
for row in range(1,11):
    for column in range(1,11):
        cs = ws.cell(row, column)  # 创建10*10个空的cell 遍历以后将自动创建(省略第3个参数value=None)
        pass

# 2、获取多个单元格
#  用切片访问多个Cell(表格)
cs = ws['A1':'C2']
print(cs)  # ((<Cell 'Sheet'.A1>, <Cell 'Sheet'.B1>, <Cell 'Sheet'.C1>), (<Cell 'Sheet'.A2>, <Cell 'Sheet'.B2>, <Cell 'Sheet'.C2>))

# 取值范围行或列 返回值元组Cell对象
print(ws['A'])  # A列
print(ws[1])  # 第1行
print(ws['C':'D'])  # C 到 D 列:同下
print(ws['C:D'])  # C 到 D 列:同上
print(ws[1:5])  # 1 到 5 行

# 迭代指定的行列,通过传递第5个参数:values_only = True 可以只获得单元格Cell的值。
iterR = ws.iter_rows(1, 3, 1, 5)  # 3行5列
for r in iterR:
    # 打印行:
    print(r)  # 每打印一次得到一行:元组Cell对象
iterC = ws.iter_cols(1, 3, 1, 5, values_only=True)  # 3列5行
for c in iterC:
    # 打印列:
    print(c)  # 每打印一次得到一列:传递了参数,values_only=True,所以是元组Cell对象.value

# 迭代所有行、列
print('----')
# 会把所有行,所有列打印出来。因为上面# 创建10*10个空的cell,所以会打印10行10列
for r in ws.rows:
    # 打印行:
    print(r)  # 10 行

for c in ws.columns:
    # 打印列:
    print(c) # 10 列

# 获取Cell的值
for row in ws.values:
    print(row)
    # (None, None, ...
    # (4, 10, None, ...
    # (None, None,...
    # ...

# 三、保存文件
wb.save("F:\myxls.xlsx")
# 可以使用tempfile模块保存为流

# 四,从文件加载
# # 下面两个方法都可以吗?
# wb = openpyxl.load_workbook('F:\example.xlsx', read_only=True)
# # wb = openpyxl.open('F:\example.xlsx') 等价于上面,指向同一个方法。
# print(wb.sheetnames)  # 返回一个list  
# ws = wb['sheetName']
#

 

posted @ 2020-10-19 14:32  老谭爱blog  阅读(395)  评论(0)    收藏  举报