用python处理Excel表

2020-03-17  本文已影响0人  刘年

今天开始学习用python处理excel表

1、初识

首先认识一下在excel表的基本类型

2、创建表单

对于创建一个新的Excel文档,直接进行Workbook类的调用即可,对于一个已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取

import openpyxl
wb =openpyxl.load_workbook('ss.xlsx',)
print(wb.sheetnames)
for sheet in wb:
    #遍历表单
    print(sheet.title)
#增加sheet表
add_sheet = wb.create_sheet("Mysheet")
print(wb.sheetnames)

运行结果

['Sheet1']
Sheet1
['Sheet1', 'Mysheet']

可以给wb.create_sheet()加索引,

add_sheet = wb.create_sheet("Mysheet",0)

得到

['Sheet1']
Sheet1
['Mysheet', 'Sheet1']

新建成表的位置就变化了
注意,这样load_workbook没有改变原表格的内容,只是读取了表格内容放在内存,所有原表格没有变化

但是如果我们将wb另存,则可以看到变化

import openpyxl
wb =openpyxl.load_workbook('ss.xlsx',)
print(wb.sheetnames)
for sheet in wb:
    #遍历表单
    print(sheet.title)
#增加sheet表
# add_sheet = wb.create_sheet("Mysheet",0)
for i in range(4):
    sheet = wb .create_sheet(str(i))
#另存文件,则新文件与源文件不一样
wb.save('s1.xlsx')
print(wb.sheetnames)

选择表单

#选择表单
# sheet3 =wb.get_sheet_by_name('sheet3')
# sheet5 = wb['']

3、处理单元格

print(ws['A1'].value)
c = ws['B1']
#c.row,c.column,c.value分别表示行数、列数、值
print('Row{},Colum{} is {}'.format(c.row,c.column,c.value))
#c.coordinate坐标,可以直接得到行列表示的值
print('cell {} is {}'.format(c.coordinate,c.value))
print(ws.cell(row =1,column=2).value)

借此机会把格式化字符串巩固一下

各种取单元格、区域和遍历的方式

#取行和列
#取第c列
colc =ws['c']
#注意,索引是从0开始,行标是从一开始,所以ws['c'][0]=ws['c1']
print(colc[2].value)
#取序列值
#访问B到C所有单元格
col_range =ws['B:C']
#访问2到6行
row_range = ws[2:6]
#遍历
#循环先从列开始B——C
for col in col_range:
    #然后逐列从上往下取单元格
    for cell in col:
        print(cell.value)
#先行后单元格
for row in row_range:
    for cell in row:
        print(cell.value)

对区域进行处理

#取区域
#注意用iter_rows()取范围的方式
for row in ws.iter_rows(min_row=1,max_row=2,max_col=2):
    for cell in row:
        print(cell)
cell_range = ws['A1:C3']
#区域内的遍历,先行后列
for rowofcellobjiect in cell_range:
    for cellobj in rowofcellobjiect:
        print(cellobj)
#最大行最大列
print('{}*{}'.format(ws.max_row,ws.max_column))

#列的表示不仅是A——Z,超过Z之后比较麻烦,所以改为数字
from openpyxl.utils import get_column_letter,column_index_from_string
#数字变列
print(get_column_letter(2),get_column_letter(900))
#字母变数字
print(column_index_from_string("AAH"))

4、写数据

import openpyxl
from openpyxl.utils import get_column_letter
wb = openpyxl.Workbook()
#当前活动页
sheet = wb.active
print(sheet.title)
sheet.title = 'happy2020'
print(wb.get_sheet_names())
#新建表单
wb.create_sheet(index = 0,title='firstsheet')
wb.create_sheet(index = 1,title='secsheet')
print(wb.get_sheet_names())
#移除表单
wb.remove_sheet(wb.get_sheet_by_name('secsheet'))
print(wb.get_sheet_names())
#保存
wb.save('sss.xlsx')

#写入单元格
#单元格有点类似字典变量,根据key索引
sheet['A1'] ='hello,world'
print(sheet['A1'].value)

ws1 = wb.create_sheet('rangename')
for row in range(1,40):
    ws1.append(range(17))

ws2 = wb.create_sheet('List')
rows =[
    ['number','batch1','batch2'],
    [2,4,6],
    [3,40,5],
    [4,50,33],
]
for row in rows:
    ws2.append(row)
ws3 = wb.create_sheet(title='bata')
for row in range(5,30):
    for col in range(15,54):
        ws3.cell(column=col,row= row,value=get_column_letter(col))
wb.save('sss.xlsx')

5、根据条件修改单元格数据

原表

现在要重新给不同的名字赋值
'zs':15,
'ls':20,
'ww':22,

import openpyxl
changemessage = {
    'zs':15,
    'ls':20,
    'ww':22,
}
wb = openpyxl.load_workbook('name.xlsx')
ws =wb.active
for rowNum in range(2,ws.max_row+1):
    name = ws.cell(row= rowNum,column=1).value
    if name in changemessage:
        ws.cell(row = rowNum,column=2).value = changemessage[name]
#一定要另存,不要覆盖原文件
wb.save('name2.xlsx')
上一篇下一篇

猜你喜欢

热点阅读