sheet[‘A1’] = ‘你好啊’
import os
os.chdir('D:\\python_major\\auto_office7')
from openpyxl import load_workbook
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet['A1'] = '你好呀'
workbook.save(filename='这是一个表格.xlsx')
cell.value = ‘你好呀’
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
cell.value = '你好呀'
workbook.save(filename='这是一个表格.xlsx')
sheet.append(Python列表) 插入的数据会接在表格内已有数据后面
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
data = [
['张三',1],
['李四',2],
['王五',3],
['赵六',4],
]
for row in data:
sheet.append(row)
workbook.save(filename='这是一个表格.xlsx')
workbook = load_workbook(filename= '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
sheet['F1002'] = '=AVERAGE(F2:F1001)'
workbook.save(filename='阿里云天池电商婴儿用户数据.xlsx')
from openpyxl.utils import FORMULAE
print(FORMULAE)
.insert_cols(idx = 数字编号,amount = 要插入的列数) 在idx数字编号的列左边插入几列
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet.insert_cols(idx = 2,amount =3)
workbook.save(filename='这是一个表格.xlsx')
.insert_rows(idx = 数字编号,amount = 要插入的列数) 在idx数字编号的行上边插入几行
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet.insert_rows(idx = 2,amount =3)
workbook.save(filename='这是一个表格.xlsx')
.delete_cols(idx = 数字编号,amount = 要插入的列数) 从idx这一行开始,包括idx这一行
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet.delete_rows(idx = 2,amount =3)
workbook.save(filename='这是一个表格.xlsx')
.delete_rows(idx = 数字编号,amount = 要插入的列数) 从idx这一列开始,包括idx这一列
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet.delete_cols(idx = 2,amount =3)
workbook.save(filename='这是一个表格.xlsx')
.move_range(‘C1:D4’,rows=2,cols=-2) 正整数 为向下或者向右,负整数为向左或向上
workbook = load_workbook(filename= '这是一个表格.xlsx')
sheet = workbook.active
sheet.move_range('C1:D4', rows =2, cols=-2)
workbook.save(filename='这是一个表格.xlsx')
workbook.create_sheet(sheet名称)
workbook = load_workbook(filename= '这是一个表格.xlsx')
print(workbook.sheetnames)
workbook.create_sheet('表格2')
print(workbook.sheetnames)
workbook.save(filename='这是一个表格.xlsx')
–> 输出结果为:
[‘Sheet1’]
[‘Sheet1’, ‘表格2’]
workbook.remove(sheet实例)
workbook = load_workbook(filename= '这是一个表格.xlsx')
print(workbook.sheetnames)
sheet = workbook['表格2'] #sheet实例
workbook.remove(sheet)
print(workbook.sheetnames)
workbook.save(filename='这是一个表格.xlsx')
–> 输出结果为:
[‘Sheet1’, ‘表格2’]
[‘Sheet1’]
workbook.copy_worksheet(sheet实例)
workbook = load_workbook(filename= '这是一个表格.xlsx')
print(workbook.sheetnames)
sheet = workbook['Sheet1'] #sheet实例
workbook.copy_worksheet(sheet)
print(workbook.sheetnames)
workbook.save(filename='这是一个表格.xlsx')
–> 输出结果为:
[‘Sheet1’]
[‘Sheet1’, ‘Sheet1 Copy’]
sheet.title 修改表格的名称
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = '表格1'
workbook.save(filename='这是一个新表格.xlsx')
特别注意,这里从openpyxl模块引入的不再是load_workbook方法,而是Workbook方法,上述代码运行后会创建一个名为’这是一个新表格.xlsx’的Excel文件
sheet.freeze_panes = ‘G2’
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
sheet.freeze_panes = 'G2'
workbook.save(filename='阿里云天池电商婴儿用户数据.xlsx')
冻结的结果是,在这个窗格的左上都是不动的,当移动滑块时,变化的只有窗格的右下方数据。也就是当运行此程序代码后,Excel表格里面会在G2窗格(左上方)处出现’十字’坐标线,在第二象限的数据没有办法移动,改变的只有其它象限的数据
sheet.auto_filter.ref = sheet.dimensions
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
sheet.auto_filter.ref = sheet.dimensions
workbook.save(filename='阿里云天池电商婴儿用户数据.xlsx')
此段程序运行之后,就是实现在Excel中全选数据后,按住Ctrl + T,进入数据的筛选模式。
编写一个Python程序,要求:
(1)打开文件阿里云天池电商婴儿用户数据.xlsx
(2)找到buy_mount这一列
(3)找到buy_mount中大于5的数据
(4)将这些数据所在行复制到一个新的Excel文件中
参考代码如下:
import os
os.chdir('D:\\python_major\\auto_office7')
from openpyxl import Workbook
from openpyxl import load_workbook
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
workbook_1 = Workbook()
sheet_1 = workbook_1.active
这一步完成的工作是:导入库、设置程序运行路径,打开目标文件,创建新文件对象并实例化sheet/sheet_1对象,前期准备工作完成
cells = sheet['F']
data_ls = []
for cell in cells:
if isinstance(cell.value,int) and cell.value >5:
data_ls.append(cell.row)
print('输出满足条件的数据所在行数的列表:\n{}\n'.format(data_ls))
该部分完成的工作是:确定了’buy_mount’所在列(通过打开Excel文件,查看得到的,如果这个字段在海量数据之中,而没有办法短时间内通过人眼找到该怎么办呢?),遍历F列,对立面的数据类型进行判断,如果是整型(还存在着字符串类型和None型数据)并且数值大于5,就提取该数值所在的行,并添加到列表
j = 1
for row in data_ls:
for col in range(ord('A'),ord('G')+1):
sheet_1[chr(col)+str(j)] = sheet[chr(col)+str(row)].value
print('正在写入第{}行数据'.format(j),end = ' ')
j += 1
该部分完成的工作是:实现sheet中目标数据的遍历,并依次转移到sheet_1中,为了保证数据的美观性(避免原位置转移),按照行数大小顺序依次进行数据的录入(变量j存在的意义)
Sublime上编写的全部代码及输出结果
新建Excel中的数据显示
def return_col_or_row(content):
'''函数功能:根据输入的content,
筛选出窗格中含有这个content的所有的col(列)和row(行)
返回两个的列表,第一个是所在列的数据,第二个是所在行的数据
'''
data_size = sheet.dimensions
size_ls = data_size.split(":")
col_min,row_min,col_max,row_max = size_ls[0][0],size_ls[0][1],size_ls[1][0],size_ls[1][1:]
row_ls = []
col_ls = []
for col in range(ord(col_min),ord(col_max)+1):
for row in range(int(row_min), int(row_max)+1):
if sheet[chr(col)+str(row)].value == content:
col_content = chr(col)
row_content = str(row)
col_ls.append(col_content)
row_ls.append(row_content)
return(col_ls,row_ls)
col = return_col_or_row('buy_mount')[0][0]
#第一个索引[0]是获取所在列的数据列表,第二个索引[0]是获得列表中第一个数据(也就是目标列)
cells = sheet[col]
import os
os.chdir('D:\\python_major\\auto_office7')
from openpyxl import Workbook
from openpyxl import load_workbook
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
workbook_1 = Workbook()
sheet_1 = workbook_1.active
def return_col_or_row(content):
'''函数功能:根据输入的content,
筛选出窗格中含有这个content的所有的col(列)和row(行)
返回两个的列表,第一个是所在列的数据,第二个是所在行的数据
'''
data_size = sheet.dimensions
size_ls = data_size.split(":")
col_min,row_min,col_max,row_max = size_ls[0][0],size_ls[0][1],size_ls[1][0],size_ls[1][1:]
row_ls = []
col_ls = []
for col in range(ord(col_min),ord(col_max)+1):
for row in range(int(row_min), int(row_max)+1):
if sheet[chr(col)+str(row)].value == content:
col_content = chr(col)
row_content = str(row)
col_ls.append(col_content)
row_ls.append(row_content)
return(col_ls,row_ls)
col = return_col_or_row('buy_mount')[0][0]
#第一个索引[0]是获取所在列的数据列表,第二个索引[0]是获得列表中第一个数据(也就是目标列)
cells = sheet[col]
data_ls = []
for cell in cells:
if isinstance(cell.value,int) and cell.value >5:
#选取窗格数据为数值的而且要大于5的
data_ls.append(cell.row)
print('输出满足条件的数据所在行数的列表:\n{}\n'.format(data_ls))
j = 1
for row in data_ls:
for col in range(ord('A'),ord('G')+1):
#print(sheet[chr(col)+str(row)].value)
sheet_1[chr(col)+str(j)] = sheet[chr(col)+str(row)].value
print('正在写入第{}行数据'.format(j),end = ' ')
j += 1
print('\n\n数据已全部导入新Excel文件!')
workbook_1.save(filename='筛选数据后的表格.xlsx')
print('\ncompleted!')