python实现——处理Excel表格(超详细)

news2025/7/18 5:18:15

目录

  • xls和xlsx
  • 基本操作
    • 1:用openpyxl模块打开Excel文档,查看所有sheet表
    • 2.1:通过sheet名称获取表格
      • 2.2:获取活动表
    • 3.1:获取表格的尺寸
    • 4.1:获取单元格中的数据
      • 4.2:获取单元格的行、列、坐标
    • 5:获取区间内的数据
      • 获取指定区间的数据
      • 获取指定行列的数据
      • 按行、列获取值
      • 获取活动表的行列数
  • 操作
    • 创建新的excel
    • 修改单元格、excel另存为
    • 添加数据
      • 插入有效数据
      • 插入空行空列
    • 删除行、列
    • 移动指定区间的单元格(move_range)
    • 字母列号与数字列号之间的转换
    • 字体样式
      • 查看字体样式
      • 修改字体样式
      • 设置对齐格式
      • 设置行高列宽
      • 合并、拆分单元格
  • sheet表
    • 创建新的sheet(create_sheet)
    • 修改sheet名字(title)
    • 复制sheet表(copy_worksheet)
    • 删除sheet表(remove)
  • 操作多个Excel表
    • 背景知识
      • numpy与pandas
      • xlsxwriter

  • 一个Excel电子表格文档称为一个工作簿
  • 一个工作簿保存在一个扩展名为.xlsx的文件中
  • 一个工作簿可以包含多个表
  • 用户当前查看的表(或关闭Excel前最后查看的表)称为活动表
  • 在特定行和列的方格称为单元格、格子

在这里插入图片描述

处理Excel表格需要用到openpyxl模块,该模块需要手动安装pip install openpyxl

xls和xlsx

简单来说:
xls是excel2003及以前版本所生成的文件格式
xlsx是excel2007及以后版本所生成的文件格式
(excel 2007之后版本可以打开上述两种格式,但是excel2013只能打开xls格式)
进一步的详细解释参见:excel后缀.xls和.xlsx有什么区别

基本操作

用到的test.xlsx表格
在这里插入图片描述

1:用openpyxl模块打开Excel文档,查看所有sheet表

openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件,这个有点类似File对象代表一个打开的文本文件。

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')	# 返回一个workbook数据类型的值
print(workbook.sheetnames)	# 打印Excel表中的所有表


# 结果:
# ['Sheet1', 'Sheet2']

2.1:通过sheet名称获取表格

在第10行,使用workbook['Sheet1']获取指定sheet表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
print(workbook.sheetnames)  # 打印Excel表中的所有表

sheet = workbook['Sheet1']  # 获取指定sheet表
print(sheet)

# 结果:
# ['Sheet1', 'Sheet2']
# <Worksheet "Sheet1">

2.2:获取活动表

使用workbook.active获取活动表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active     # 获取活动表
print(sheet)

# 结果:
# <Worksheet "Sheet1">

3.1:获取表格的尺寸

这里所说的尺寸大小,指的是excel表格中的数据有几行几列,针对的是不同的sheet而言
使用sheet.dimensions获取表格的尺寸
下面打印的A1:B7是什么意思呢?
在这里插入图片描述

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook['Sheet1']  # 获取指定sheet表
print(sheet.dimensions)     # 获取表格的尺寸大小

# 结果:
# A1:B7

4.1:获取单元格中的数据

方法1:指定坐标的方式
sheet[“A1”]

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active     # 获取活动表
# print(sheet.dimensions)     # 获取表格的尺寸大小

cell1 = sheet['A1']         # 获取A1单元格的数据
cell2 = sheet['B7']         # 获取B7单元格的数据
# cell2 = sheet['B7'].value		# 另一种写法

# 正确示范
# cell1.value获取单元格A1中的值
# cell2.value获取单元格B7中的值
print(cell1.value,cell2.value)  # 姓名 18

# 错误示范
print(cell1,cell2)  # <Cell 'Sheet1'.A1> <Cell 'Sheet1'.B7>

方法2: 指定行列的方式
sheet.cell(row=, column=)方式

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active     # 获取活动表
# print(sheet.dimensions)     # 获取表格的尺寸大小

cell1 = sheet.cell(row=1,column=1)         # 获取第1行第1列的数据
cell2 = sheet.cell(row=3,column=2)         # 获取第3行第4的数据

# 正确示范
# cell1.value获取单元格A1中的值
# cell2.value获取单元格B7中的值
print(cell1.value,cell2.value)  # 姓名 41

4.2:获取单元格的行、列、坐标

  • .row 获取某个格子的行数;
  • .columns 获取某个格子的列数;
  • .coordinate 获取某个格子的坐标;
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
# print(sheet.dimensions)     # 获取表格的尺寸大小

cell = sheet.cell(row=3, column=2)  # 获取第3行第4的数据

print(cell.value, cell.row, cell.column, cell.coordinate)

'''
结果:
41 3 2 B3
'''

5:获取区间内的数据

获取单行单列数据的时候,使用一层for循环;获取多行多列、指定区间的数据时,使用两层for循环

获取指定区间的数据

  1. 使用sheet['A1:A5']拿到指定区间
  2. 使用两个for循环拿到数据
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:')
print(sheet)

cell = sheet['A1:A5']  # 获取A1到A5的数据

print(cell)

# 打印A1到A5的数据
for i in cell:
    for j in i:
        print(j.value)

# 结果:
# 当前活动表是:
# <Worksheet "Sheet1">
# ((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,), (<Cell 'Sheet1'.A4>,), (<Cell 'Sheet1'.A5>,))
# 姓名
# 张三
# 李四
# 王五
# 赵六

获取指定行列的数据

  • sheet[“A”] — 获取A列的数据
  • sheet[“A:C”] — 获取A,B,C三列的数据
  • sheet[5] — 只获取第5行的数据

下面的代码,获取一列数据的时候,使用一层for循环

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

cell = sheet['2']  # 获取第2行的数据

# 打印A1到A5的数据
for i in cell:
    print(i.value)

# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 张三
# 74

下面代码,获取两列数据的时候,使用两层for循环。注意到,两列的结果打印到一起了,可读性较差

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

cell = sheet['A:B']  # 获取AB列的数据

# 打印AB列数据
for i in cell:
    for j in i:
        print(j.value)

# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 姓名
# 张三
# 李四
# 王五
# 赵六
# alice
# bob
# 年龄
# 74
# 41
# 56
# 12
# 17
# 18

按行、列获取值

iter_rows():按行读取
iter_cols():按列读取

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

# 按行获取值
print('按行获取值')
for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2):
    for j in i:
        print(j.value)

# 按列获取值
print('按列获取值')
for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):
    for j in i:
        print(j.value)

# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 按行获取值
# 张三
# 74
# 李四
# 41
# 王五
# 56
# 赵六
# 12
# 按列获取值
# 张三
# 李四
# 王五
# 赵六
# 74
# 41
# 56
# 12

在这里插入图片描述

获取活动表的行列数

方法1:使用
sheet.max_row 获取行数
sheet.max_column 获取列数

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('2.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

rows = sheet.max_row        # 获取行数
column = sheet.max_column   # 获取列数

print(rows)
print(column)

'''
结果:
当前活动表是:<Worksheet "Sheet1">
381
6
'''

方法2:自己写一个for循环

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

row = []
column = []
# 获取当前活动表有多少行
for i in sheet.rows:
    row.append(list(i))         # i是元组类型,转为列表

# 获取当前活动表有多少列
for i in sheet.columns:
    column.append(list(i))    # i是元组类型,转为列表

print('行数:'+str(len(row)))
print('列数:'+str(len(column)))

'''
结果:
当前活动表是:<Worksheet "1号sheet">
行数:12
列数:3
'''

操作

创建新的excel

第9行代码用来指定创建的excel的活动表的名字:

  • 不写第9行,默认创建sheet
  • 写了第9行,创建指定名字的sheet表
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = '1号sheet'
workbook.save('1.xlsx')

修改单元格、excel另存为

第9行代码,通过给单元格重新赋值,来修改单元格的值
第9行代码的另一种写法sheet['B1'].value = 'age'
第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
sheet['A1'] = 'name'
workbook.save('test.xlsx')

在这里插入图片描述

添加数据

插入有效数据

使用append()方法,在原来数据的后面,按行插入数据

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

data = [
    ['素子',23],
    ['巴特',24],
    ['塔奇克马',2]
]
for row in data:
    sheet.append(row)   # 使用append插入数据
workbook.save('test.xlsx')

在这里插入图片描述

插入空行空列

  • insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入
  • insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

sheet.insert_rows(idx=3, amount=2)
sheet.insert_cols(idx=2, amount=1)
workbook.save('test.xlsx')

在这里插入图片描述

删除行、列

  • delete_rows(idx=数字编号, amount=要删除的行数)
  • delete_cols(idx=数字编号, amount=要删除的列数)
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

sheet.delete_rows(idx=10)           # 删除第10行
sheet.delete_cols(idx=1, amount=2)  # 删除第1列,及往右共2列
workbook.save('test.xlsx')

在这里插入图片描述

移动指定区间的单元格(move_range)

move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

sheet.move_range('D11:F12',rows=0,cols=-3)  # 移动D11到F12构成的矩形格子
workbook.save('test.xlsx')

在这里插入图片描述

字母列号与数字列号之间的转换

核心代码

from openpyxl.utils import get_column_letter, column_index_from_string

# 根据列的数字返回字母
print(get_column_letter(2))  # B
# 根据字母返回列的数字
print(column_index_from_string('D'))  # 4

举个例子:

import os
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('2.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

# 根据列的数字返回字母
print(get_column_letter(2))  # B
# 根据字母返回列的数字
print(column_index_from_string('D'))  # 4

字体样式

查看字体样式

import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:'+str(sheet))

cell = sheet['A1']
font = cell.font
print('当前单元格的字体样式是')
print(font.name, font.size, font.bold, font.italic, font.color)

'''
当前活动表是:<Worksheet "1号sheet">
当前单元格的字体样式是
等线 11.0 False False <openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme'
'''

修改字体样式

openpyxl.styles.Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)
其中,字体颜色中的color是RGB的16进制表示

import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print(sheet)

cell = sheet['A1']
cell.font = openpyxl.styles.Font(name="微软雅黑", size=20, bold=True, italic=True, color="FF0000")

workbook.save('test.xlsx')

在这里插入图片描述

再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法

import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print(sheet)

cell = sheet['A']
for i in cell:
    i.font = openpyxl.styles.Font(name="微软雅黑", size=20, bold=True, italic=True, color="FF0000")

workbook.save('test.xlsx')

在这里插入图片描述

设置对齐格式

Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)
水平对齐:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,'right,‘general’
垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’

import os
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

cell = sheet['A1']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment

workbook.save('test.xlsx')

在这里插入图片描述

当然,你仍旧可以调用for循环来实现对多行多列的操作

import os
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

cell = sheet['A']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
for i in cell:
    i.alignment = alignment
    
workbook.save('test.xlsx')

在这里插入图片描述

设置行高列宽

设置行列的宽高:

  • row_dimensions[行编号].height = 行高
  • column_dimensions[列编号].width = 列宽
import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

# 设置第1行的高度
sheet.row_dimensions[1].height = 50
# 设置B列的卷度
sheet.column_dimensions['B'].width = 20

workbook.save('test.xlsx')

在这里插入图片描述

设置所有单元格
(显示的结果是设置所有,有数据的单元格的)

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import os

os.chdir(r'C:\Users\asuka\Desktop')

workbook = load_workbook('1.xlsx')
print(workbook.sheetnames)  # 打印所有的sheet表
ws = workbook[workbook.sheetnames[0]]  # 选中最左侧的sheet表

width = 2.0  # 设置宽度
height = width * (2.2862 / 0.3612)  # 设置高度

print("row:", ws.max_row, "column:", ws.max_column)  # 打印行数,列数
for i in range(1, ws.max_row + 1):
    ws.row_dimensions[i].height = height
for i in range(1, ws.max_column + 1):
    ws.column_dimensions[get_column_letter(i)].width = width

workbook.save('test.xlsx')

在这里插入图片描述

合并、拆分单元格

合并单元格有下面两种方法,需要注意的是,如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。

  • merge_cells(待合并的格子编号)
  • merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

# 方法1:
sheet.merge_cells('A12:B13')
# 方法2:
sheet.merge_cells(start_row=12, start_column=3, end_row=13, end_column=4)

# 加一个居中对齐
cell = sheet['A12']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment

cell = sheet['C12']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment

workbook.save('test.xlsx')

在这里插入图片描述

拆分单元格的方法同上

  • unmerge_cells(待合并的格子编号)
  • unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

sheet表

创建新的sheet(create_sheet)

create_sheet(“新的sheet名”):创建一个新的sheet表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

workbook.create_sheet('3号sheet')    # 创建新的sheet表
print(workbook.sheetnames)			 # 查看所有的sheet表
workbook.save('test.xlsx')

'''
当前活动表是:<Worksheet "Sheet1">
['Sheet1', 'Sheet2', '3号sheet']
'''

在这里插入图片描述

修改sheet名字(title)

第11行,使用title修改sheet表的名字

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

sheet.title = '1号sheet'  # 修改sheet表
workbook.save('test.xlsx')

在这里插入图片描述

复制sheet表(copy_worksheet)

在“操作”>“修改单元格、excel另存为”中提到了另存为,其实复制sheet表就是一个另存为的过程,你要是在12行代码保存的时候使用第7行的文件名,那么复制的sheet表就保存到自己身上,内容跟copy.xlsx一样。

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))

workbook.copy_worksheet(sheet)	# 复制sheet表
workbook.save('copy.xlsx')

在这里插入图片描述

删除sheet表(remove)

remove(“sheet名”):删除某个sheet表
要删除某sheet表,需要激活这个sheet表,即:将其作为活动表(关于活动表的定义请看前面文章开头写的有)下面8~11行代码展示了原始活动表与手动更换活动表,第13行代码删掉活动表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路径

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一个workbook数据类型的值
sheet = workbook.active  # 获取活动表
print('当前活动表是:' + str(sheet))
sheet = workbook['3号sheet']     # 手动切换到要删除的sheet表,一旦切换,这张表就是活动表
print('当前活动表是:' + str(sheet))

workbook.remove(sheet)  # 删除当前活动表
print(workbook.sheetnames)
workbook.save('test.xlsx')

'''
当前活动表是:<Worksheet "Sheet1">
当前活动表是:<Worksheet "3号sheet">
['Sheet1', 'Sheet2']
'''

在这里插入图片描述

操作多个Excel表

其实想用openpyxl玩这个,但是网上用的是别的库,就有点无语,以后熟练的话在自己写一个函数实现吧

背景知识

numpy与pandas

NumPy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库;pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,我们需要利用Pandas进行Excel的合并

  1. 下面的代码生成了一个5行3列的包含15个字符的嵌套列表

(注意,第4行代码:15是等于35的,如果是15对应43,或者16对应5*3都会报错)
(注意,第5行代码,虽然5行3列是15个数据,但是可以指定数据从1开头,到16结束)

import numpy as np
import pandas as pd

xx = np.arange(15).reshape(5, 3)
yy = np.arange(1, 16).reshape(5, 3)

print(xx)
print(yy)

'''
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]]
'''
  1. 添加表头

使用pandas库的DataFrame来添加表头。关于打印的结果,把最左侧的一列去掉之后会发现结果很和谐,这是因为最左侧的一列代表行号。此时xx变量的类型是<class ‘pandas.core.frame.DataFrame’>

import numpy as np
import pandas as pd

xx = np.arange(15).reshape(5, 3)
yy = np.arange(1, 16).reshape(5, 3)
xx = pd.DataFrame(xx, columns=["语文", "数学", "外语"])
yy = pd.DataFrame(yy, columns=["语文", "数学", "外语"])
print(xx)
print(yy)

'''
结果:
   语文  数学  外语
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  13  14
   语文  数学  外语
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12
4  13  14  15
'''
  1. 合并两个矩阵

pd.concat(list)括号中传入的是一个列表;
ignore_list=True表示忽略原有索引,重新生成一组新的索引;
或者直接可以写成z = pd.concat([xx,yy],ignore_list=True);
不知道为什么失败,暂时搁浅

xlsxwriter

xlsxwriter模块一般是和xlrd模块搭配使用的,
xlsxwriter:负责写入数据,
xlrd:负责读取数据。

  1. 创建一个工作簿
import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

# 这一步相当于创建了一个新的"工作簿";
# "demo.xlsx"文件不存在,表示新建"工作簿";
# "demo.xlsx"文件存在,表示新建"工作簿"覆盖原有的"工作簿";
workbook = xlsxwriter.Workbook("demo.xlsx")

# close是将"工作簿"保存关闭,这一步必须有,否则创建的文件无法显示出来。
workbook.close()
  1. 创建sheet表
import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

workbook = xlsxwriter.Workbook("cc.xlsx")   # 创建一个名为cc.xlsx的文件
worksheet = workbook.add_worksheet("2018年销售量")  # 创建一个名为“2018年销售量”的sheet表

workbook.close()
  1. 写入数据
import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

# 创建一个名为【demo.xlsx】工作簿;
workbook = xlsxwriter.Workbook("demo.xlsx")

# 创建一个名为【2018年销售量】工作表;
worksheet = workbook.add_worksheet("2018年销售量")

# 使用write_row方法,为【2018年销售量】工作表,添加一个表头;
headings = ['产品', '销量', "单价"]
worksheet.write_row('A1', headings)
# 使用write方法,在【2018年销售量】工作表中插入一条数据;
# write语法格式:worksheet.write(行,列,数据)

data = ["苹果", 500, 8.9]
for i in range(len(headings)):
    worksheet.write(1, i, data[i])

workbook.close()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux- 系统随你玩之--玩出花活的命令浏览器上

文章目录1、背景2、命令浏览器2.1、命令浏览器介绍2.2、特点2.3 常用功能选项3、实操3.1、使用 wget 下载文件3.2、 断点续传3.3、镜像整个站点4、 总结1、背景 一位友人说他有台服务器&#xff0c;需要下载一个文件&#xff0c;但是没有视窗界面与下载工具&#xff0c;怎么办…

Cobalt Strike----(1)

团队服务器 Cobalt Strike 分为客户端组件和服务器组件。服务器组件&#xff0c;也就是团队服务器&#xff0c;是Beacon payload 的控制器&#xff0c;也是 Cobalt Strike 社会工程功能的托管主机。团队服务器还存储由Cobalt Strike 收集的数据&#xff0c;并管理日志记录。Cob…

猿创征文|【Typescript】搭建TS的编译环境

&#x1f373;作者&#xff1a;贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛\color{#FF0000}{贤蛋 大眼萌 &#xff0c;一名很普通但不想普通的程序媛}贤蛋大眼萌&#xff0c;一名很普通但不想普通的程序媛&#x1f933; &#x1f64a;语录&#xff1a;多一些不为什么的…

vue修改 el-input 输入框默认背景色

vue修改 el-input 输入框默认背景色 实际项目需要修改默认的 输入框背景色 &#xff0c;因为原本的默认框背景色设置属性 :disabledtrue 之后显示不是很清晰&#xff0c;所以需要配置相应的规则 原本的不能修改的输入样式&#xff0c;显示的不是很清晰 加上样式之后的效果 <…

自学黑客,一般人我劝你还是算了吧

写在开篇 笔者本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 我为啥说自学黑客&#xff0c;一般人我还是劝你算了吧。因为我就是那个不一般的人。 首先我谈下对黑客&…

十大经典排序算法(上)

目录 1.1冒泡排序 1. 算法步骤 3.什么时候最快 4. 什么时候最慢 5.代码实现 1.2选择排序 1. 算法步骤 2. 动图演示 3.代码实现 1.3 插入排序 1. 算法步骤 2. 动图演示 3. 算法实现 1.4 希尔排序 1. 算法步骤 2. 动图演示 3.代码实现 1.5 归并排序 1. 算法步骤 2…

Android: 彻底搞懂Lifecycle——使用篇

系列文章目录 第一章 Android: 彻底搞懂Lifecycle——使用篇 第二章 Android: 彻底搞懂Lifcycle——原理篇 文章目录系列文章目录前言一、Lifecycle是什么&#xff1f;1. 应用场景2. 示例二、Lifecycle使用1. 泳&#xff08;用&#xff09;裤&#xff08;库&#xff09;第一步…

PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像

目录 一、环境配置 1.1 安装PyQt5 1.2 安装Qt工具包 1.3 配置环境变量 1.4 测试PyQt5 1.5 配置PyCharm 二、QtDesigner 窗口简单介绍 2.1 初始界面 2.2 控件介绍 三、相关函数 3.1 读取文件函数 3.1.1 打开本地图片 3.1.2 保存图片到本地 3.1.3 打开文件夹 3.1.4 打…

微信小程序|基于小程序+C#制作一个考试答题小程序

基于小程序+C#制作一个考试答题小程序打破传统线下考试答题的边界线问题,使考试不用再局限与某个统一的场所,只要有设备,哪里都能考试。 一、小程序

【动态规划】最长上升子序列、最大子数组和题解及代码实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

功能测试用例多次录制后,我丢掉了selenium,选择龙测AI-TestOps云平台

目录一、如何使用龙测AI-TestOps云平台1、进入龙测AI-TestOps云平台2、新建项目3、新建流程图4、创建任务5、查看任务状态6、查看报告、图片7、下载流程图、测试报告、excel用例二、龙测AI-TestOps云平台AI功能介绍1、NLP2、视频AI转流程图三、总结功能测试用例多次录制后&…

写着简单跑得又快的数据库语言 SPL

数据库语言的目标SQL为什么不行SPL为什么能行 数据库语言的目标 要说清这个目标&#xff0c;先要理解数据库是做什么的。 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xf…

【微信小程序】按钮还能这样用?

目录 &#x1f353;button 按钮的基本使用 &#x1f349;各种神奇的按钮 &#x1f353;button 按钮的基本使用 按钮组件 功能比 HTML 中的 button 按钮丰富 通过 open-type 属性可以调用微信提供的各种功能&#xff08;客服、转发、获取用户授权、获取用户信息等&#xff09;…

占有统治地位的Transformer究竟是什么

讲个有趣的小故事我高二那年从乙班考入了甲班&#xff0c;对于那时的我 偏科英语最高只有108班级平均英语成绩125暴躁难为人女英语老师&#xff0c;使我上英语课时战战兢兢。英语老师很时尚&#xff0c;喜欢搞花里胡哨的词语让我们放松&#xff0c;也很尊重我虽然暴躁但维护着我…

前端系列——vue2+高德地图web端开发(使用和引入)

vue2高德地图web端开发&#xff08;使用和引入&#xff09;前言基础准备工作高德地图的个人开发者注册高德api网址1.点击进行注册2.注册完之后进入控制台3.创建新应用4.添加高德 2.0 新增创建vue2的项目npm 引入高德官方文档1.安装2.进入项目3. NPM 方式安装使用 Loader4.在com…

【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?

目录 一、什么是RabbitMQ&#xff1f; 二、RabbitMQ是干什么的&#xff1f; 三、RabbitMQ的常见作用有那些&#xff1f; 四、RabbitMQ的应用场景有那些&#xff1f; 场景一&#xff1a;用户订单&#xff0c;库存处理。【服务间解耦】 场景二&#xff1a;用户注册&#xf…

javaScript实现倒计时功能

目录 一、主要思路 二、css样式 三、html代码 四、js内容 五、完整代码展示 六、效果展示 一、主要思路 1.通过内置时间函数实例化日期对象获取当前时间 new Date。 2.因为时间无法减去时间&#xff0c;有可能生成负数&#xff0c;所以采用时间戳的方法得到毫秒数形式的…

(完整版)2022大厂Java八股文面试题库|附答案

Java基础 说下面向对象四大特性Java语言有些特点什么是Java程序的主类&#xff1f;应用程序和小程序的主类有何不同&#xff1f;访问修饰符public,private,protected,以及不写&#xff08;默认&#xff09;时的区别&#xff1f;float f3.4;是否正确&#xff1f;Java有没有goto…

Spring Boot(四):Spring Boot启动原理分析

文章目录 Spring Boot启动原理分析 一、依赖导入原理 二、Spring Boot包扫描原理 三、Spring Boot自动配置原理 Spring Boot启动原理分析 一、依赖导入原理 父项目版本控制 ctrl 点击spring-boot-starter-parent进入 继续点击&#xff0c;进入spring-boot-dependencies…

微前端-qiankun

概念 使用框架&#xff1a;qiankun 介绍&#xff1a; qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun官网&#xff1a;Go 当使用 iframe 整合系统时&#xff0c;假设我们有系统 A, 当我们…