本文代码及数据集来自《超简单:用Python让Excel飞起来(实战150例)》
# 根据数据内容自动调整一个工作表的行高和列宽
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook= app.books.open('新能源汽车备案信息.xlsx')
worksheet = workbook.sheets[0]
worksheet.autofit() # 自动调整工作表的行高和列宽
workbook.save()
workbook.close()
app.quit()
# 精确调整一个工作表的行高和列宽
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('产品信息表.xlsx')
worksheet = workbook.sheets[0]
area = worksheet.range('A1').expand('table') # 选择工作表中已有数据的单元格区域
area.column_width = 15 # 列宽调整为15个字符
area.row_height = 20 # 行高调整为20磅
workbook.save()
workbook.close()
app.quit()
# 调整一个工作簿中所有工作表的行高和列宽
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('新能源汽车备案信息.xlsx')
worksheet = workbook.sheets
for i in worksheet:
i.autofit()
workbook.save()
workbook.close()
app.quit()
# 调整多个工作簿的行高和列宽
from pathlib import Path
import xlwings as xw
app = xw.App(visible=False, add_book=False)
folder_path = Path('F:\\python\\第4章\\区域销售统计\\')
file_list = folder_path.glob('*.xls*')
for i in file_list:
workbook = app.books.open(i)
worksheet = workbook.sheets
for j in worksheet:
j.autofit()
workbook.save()
workbook.close()
app.quit()
# 在一个工作表中插入空白行
from openpyxl import load_workbook
workbook = load_workbook('工资表.xlsx')
worksheet = workbook['工资表']
worksheet.insert_rows(6, 1) # 在第6行上方插入一个空白行
workbook.save('工资表1.xlsx')
# 在一个工作表中每隔一行插入空白行
from openpyxl import load_workbook
workbook = load_workbook('工资表1.xlsx')
worksheet = workbook['工资表']
num = 2 # 指定插入空白行的数量
last_num = worksheet.max_row # 获取工作表中数据区域的行数
for i in range(0, last_num):
worksheet.insert_rows(i * (num + 1) + 3, num) # 该函数的第1个参数是插入空白行的位置,第2个参数是插入空白行的数量
workbook.save('工资表2.xlsx')
# 在一个工作表中插入空白列
from openpyxl import load_workbook
workbook = load_workbook('新能源汽车备案信息.xlsx')
worksheet = workbook['汽车备案信息']
worksheet.insert_cols(5, 1) # 在第5列(即E列)前面插入一个空白列
workbook.save('新能源汽车备案信息1.xlsx')
# 在一个工作表中删除行
from openpyxl import load_workbook
workbook = load_workbook('新能源汽车备案信息.xlsx')
worksheet = workbook['汽车备案信息']
worksheet.delete_rows(5, 2) # “5”表示从第5行开始删除,“2”表示删除两行
workbook.save('新能源汽车备案信息1.xlsx')
# 在一个工作表中删除列(方法一)
from openpyxl import load_workbook
workbook = load_workbook('新能源汽车备案信息.xlsx')
worksheet = workbook['汽车备案信息']
worksheet.delete_cols(5, 2)
workbook.save('新能源汽车备案信息1.xlsx')
# 在一个工作表中删除列(方法二)
import pandas as pd
data = pd.read_excel('销售表.xlsx', sheet_name=0)
data.drop(columns=['成本价', '产品成本'], inplace=True)
data.to_excel('销售表1.xlsx', sheet_name='总表', index=False)
# 在一个工作表中追加行数据
import xlwings as xw
app = xw.App(visible=False, add_book=False)
new_data = [['8', '重庆**汽车有限公司', '孙**', '187****2245'], ['9', '四川**汽车有限公司', '肖**', '177****2245']]
workbook = app.books.open('产品信息表.xlsx')
worksheet = workbook.sheets['供应商信息']
data = worksheet.range('A1').expand('table') # 选择工作表中已有数据的单元格区域
num = data.shape[0] # 获取已有数据的单元格区域的行数
worksheet.range(num + 1, 1).value = new_data # 在已有数据的单元格区域下一行追加行数据
workbook.save()
workbook.close()
app.quit()
# 在多个工作簿的同名工作表中追加行数据
from pathlib import Path
import xlwings as xw
app = xw.App(visible=False, add_book=False)
folder_path = Path('F:\\python\\第4章\\区域销售统计\\')
file_list = folder_path.glob('*.xls*')
new_data = [['8', '重庆**汽车有限公司', '孙**', '187****2245'], ['9', '四川**汽车有限公司', '肖**', '177****2245']]
for i in file_list:
workbook = app.books.open(i)
worksheet = workbook.sheets['供应商信息']
data = worksheet.range('A1').expand('table')
num = data.shape[0]
worksheet.range(num + 1, 1).value = new_data
workbook.save()
workbook.close()
app.quit()
# 在一个工作表中追加列数据
import pandas as pd
data = pd.read_excel('销售表.xlsx', sheet_name=0)
max_data = data['利润'].max() # 获取“利润”列数据的最大值
level = [0, 5000, 10000, max_data] # 各等级的边界值
level_names = ['差', '良', '优'] # 各等级的相应标签
data['等级'] = pd.cut(data['利润'], level, labels=level_names) # 插入“等级”列
data.to_excel('销售表1.xlsx', sheet_name='总表', index=False)
# 提取一个工作表的行数据和列数据
import pandas as pd
data = pd.read_excel('销售表.xlsx', sheet_name='总表')
row_data = data.iloc[0:10] # 提取前十行数据
col_data = data[['单号', '销售日期', '产品名称', '利润']] # 提取指定列的数据
range_data = data.iloc[0:5][['单号', '销售日期', '产品名称', '利润']] # 提取单元格区域的数据
row_data.to_excel('提取行数据.xlsx', sheet_name='前10行数据', index=False)
col_data.to_excel('提取列数据.xlsx', sheet_name='利润表', index=False)
range_data.to_excel('提取数据.xlsx', sheet_name='Sheet1', index=False)
# 提取一个工作簿中所有工作表的行数据
import pandas as pd
data = pd.read_excel('办公用品采购表.xlsx', sheet_name=None)
with pd.ExcelWriter('提取表.xlsx') as workbook: # 新建一个空白工作簿
for i, j in data.items():
row_data = j.iloc[0:5] # 提取各个工作表的前5行数据
row_data.to_excel(workbook, sheet_name=i, index=False)
# 替换一个工作表的数据
import pandas as pd
data = pd.read_excel('销售表.xlsx', sheet_name=0) # 读取工作簿“销售表.xlsx”中第1个工作表的数据
data = data.replace('离合器', '刹车片')
data.to_excel('销售表1.xlsx', sheet_name='总表', index=False)
# 替换一个工作簿中所有工作表的数据
import pandas as pd
data = pd.read_excel('办公用品采购表.xlsx', sheet_name=None)
with pd.ExcelWriter('办公用品采购表1.xlsx') as workbook:
for i, j in data.items():
data = j.replace('固体胶', '透明胶带')
data.to_excel(workbook, sheet_name=i, index=False)
# 替换一个工作表的列数据
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('产品信息表1.xlsx')
worksheet = workbook.sheets['配件信息'] # 指定该工作簿中的工作表“配件信息”
data = worksheet.range('A2').expand('table').value # 从单元格A2开始读取
for i, j in enumerate(data): # 替换第4列(即“单价”列)的数据,这里将“单价”列的数据增加10%
data[i][3] = float(j[3]) * (1 + 0.1)
worksheet.range('A2').expand('table').value = data # 将替换后的数据写入工作表
workbook.save()
workbook.close()
app.quit()
# 替换一个工作表指定列数据对应的列数据
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('销售表.xlsx')
worksheet = workbook.sheets['总表']
data = worksheet.range('A1').expand('table').value
for i, j in enumerate(data):
if (j[2] == '里程表') and (j[3] == 850): # 判断第3列的数据是否为“里程表”以及第4列的数据是否为850
data[i][3] = 900 # 将“里程表”对应的成本价替换为900
worksheet.range('A1').expand('table').value = data
workbook.save()
workbook.close()
app.quit()
# 转置一个工作表的行列
import xlwings as xw
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('产品分析表.xlsx')
worksheet = workbook.sheets[0]
data = worksheet.range('A1').expand('table').options(transpose=True).value
worksheet.clear()
worksheet.range('A1').expand().value = data
workbook.save('产品分析表1.xlsx')
workbook.close()
app.quit()
# 从指定行列冻结一个工作表的窗格
from openpyxl import load_workbook
workbook = load_workbook('销售表.xlsx')
worksheet = workbook['总表']
worksheet.freeze_panes = 'B2' # 把单元格B2上方的行及左侧的列冻结
workbook.save('销售表1.xlsx')
# 将一个工作表的一列拆分为多列
import pandas as pd
data = pd.read_excel('产品规格表.xlsx', sheet_name=0)
data_col = data['产品规格'].str.split('*', expand=True)
data['长(cm)'] = data_col[0]
data['宽(cm)'] = data_col[1]
data['高(cm)'] = data_col[2]
data.drop(columns=['产品规格'], inplace=True)
data.to_excel('产品规格表1.xlsx', sheet_name='规格表', index=False)
# 将一个工作表的多列合并为一列
import pandas as pd
data = pd.read_excel('产品规格表1.xlsx', sheet_name='规格表')
data['产品规格'] = data['长(cm)'].astype(str) + '*' + data['宽(cm)'].astype(str) + '*' + data['高(cm)'].astype(str)
data.drop(columns=['长(cm)', '宽(cm)', '高(cm)'], inplace=True)
data.to_excel('产品规格表2.xlsx', sheet_name='Sheet1', index=False)
# 在一个工作表中隐藏行数据
from openpyxl import load_workbook
workbook = load_workbook('新能源汽车备案信息.xlsx')
worksheet = workbook['汽车备案信息']
worksheet.row_dimensions.group(2, 10, hidden=True) # 这里隐藏的是第2~10行
workbook.save('新能源汽车备案信息1.xlsx')
# 在一个工作表中隐藏列数据
from openpyxl import load_workbook
workbook = load_workbook('新能源汽车备案信息.xlsx')
worksheet = workbook['汽车备案信息']
worksheet.column_dimensions.group('A', 'D', hidden=True) # 这里隐藏的是A列到D列
workbook.save('新能源汽车备案信息1.xlsx')