【Python】使用Python操作XLSX数据表
目录一、安装openpyxl库:二、openpyxl操作工作簿结构数据:1.工作簿的新建和保存:2.打开修改工作簿:打开指定工作表:工作表的创建、修改、删除:3.获取单元格:4.获取一个区域内所有单元格数据:获取指定区域的单元格数据:单元格数字和字母之间的转换:工作表的最大最小行和列:5.单元格数据的修改:向指定单元格写入数据:追加工作表内容:在工作表中插入数据:删除工作表指定行和列:6.移动和冻
·
目录
一、安装openpyxl库:
pip install openpyxl
二、openpyxl操作工作簿结构数据:
1.工作簿的新建和保存:
import openpyxl
# 新建工作簿:
wb = openpyxl.Workbook()
# 保存工作簿:
wb.save("工作簿保存路径和名称")
2.打开修改工作簿:
打开指定工作表:
import openpyxl
# 加载存在的工作簿:
wb = openpyxl.load_workbook("工作簿全路径")
# 打开指定的工作簿中的指定工作表:
ws = wb["工作表名"]
ws = wb.active # 打开激活的工作表
工作表的创建、修改、删除:
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 显示工作表表名:worksheets会以列表的形式返回当前工作簿里所有的工作表表名:
sheet_list = wb.worksheets
# 获取工作表名称:
for i in sheet_list:
# title:获取工作表名称
print(i.title)
# 创建工作表:
wb.create_sheet("工作表01")
# 删除指定工作表:
wb.remove(wb["工作表01"])
# 拷贝工作表:
sheet_copy = wb.copy_worksheet(wb["工作表01"])
sheet_copy.title = "工作表-复制"
# 执行完修改之后,还需要持久化到本地磁盘,一般情况我们使用另存
wb.save("test03.xlsx")
3.获取单元格:
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 获取工作簿的工作表:
ws = wb["Sheet"]
# 等价于:
ws = wb.worksheets[0]
# 获取工作表中的单元格:
cell = ws["A1"].value
# 等价于:
cell = ws.cell(row=1,column=1).value
4.获取一个区域内所有单元格数据:
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 获取工作簿的工作表:
ws = wb.worksheets[0]
# 获取工作表中的单元格区域:
cell = ws["A1:F3"]
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 获取工作簿的工作表:
ws = wb.worksheets[0]
# 获取工作表中的单元格区域:
wb_range = ws["A1:F3"] # 这种方式一次获取的是一行数据
for row in wb_range:
print(row)
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 获取工作簿的工作表:
ws = wb["Sheet"]
# 以列表的形式去获取工作表数据:
values = list(ws.values)
list是对整个工作表进行操作,不针对单独的某一个数据区域进行操作!这种方式获取到的数据,是按照工作表按行读取!
list获取到的数据,可以进行切片的方式获取你想要的区域数据!
获取指定区域的单元格数据:
import openpyxl
# 加载工作簿:
wb = openpyxl.load_workbook("test.xlsx")
# 获取工作簿的工作表:
ws = wb["Sheet"]
# 获取工作表单元格区域:
ws_range = ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=6)
for row in ws_range:
for i in row:
print(i.value)
通过指定单元格范围来获取指定范围中的数据:
ws_range = ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=6)
# 获取当前工作表的所有行:
for row in ws.rows:
print(row)
# 获取当前工作表的所有列:
for column in ws.columns:
print(column)
单元格数字和字母之间的转换:
- 数字转为字母:
# 数字转字母:
number = openpyxl.utils.get_column_letter(数字)
- 字母转数字:
# 字母转字符串:
number = openpyxl.utils.column_index_from_string("x")
工作表的最大最小行和列:
- max_row
- max_column
5.单元格数据的修改:
向指定单元格写入数据:
# 修改数据:
ws["G1"] = "Krian"
# 对数据表修改之后,一定要保存数据表:
wb.save("test01.xlsx")
# 修改数据:
ws.cell(1,openpyxl.utils.column_index_from_string("G"),value="爱吃糖的范同学")
# 对数据表修改之后,一定要保存数据表:
wb.save("test02.xlsx")
追加工作表内容:
追加内容默认是在当前已有数据的单元格换行追加!
data_list = ["爱吃糖的范同学",100,100,100,1000,1000]
# 追加数据:
ws.append(data_list)
# 保存修改:
wb.save("test02.xlsx")
在工作表中插入数据:
插入列:
- idx:索引位置
- amount:插入列数
# 在当前工作表中插入列:
ws.insert_cols(idx=2, amount=4)
# 保存修改:
wb.save("test02.xlsx")
插入行:
- idx:索引位置
- amount:插入行数
# 在当前工作表中插入行:
ws.insert_rows(idx=2, amount=4)
# 保存修改:
wb.save("test02.xlsx")
删除工作表指定行和列:
删除列:
- idx:索引位置
- amount:删除列数
# 在当前工作表中删除列:
ws.delete_cols(idx=2, amount=4)
# 保存修改:
wb.save("test02.xlsx")
删除行:
- idx:索引位置
- amount:删除行数
# 在当前工作表中删除行:
ws.delete_rows(idx=2, amount=4)
# 保存修改:
wb.save("test02.xlsx")
6.移动和冻结单元格:
移动单元格:
- 指定单元格移动范围
- rows:移动行数
- cols:移动列数
# 单元格移动:
ws.move_range("A1:F7", rows=10, cols=10)
# 保存单元格:
wb.save("test02.xlsx")
冻结单元格:
# 冻结单元格:
ws.freeze_panes = "L14"
# 保存单元格:
wb.save("test02.xlsx")
三、实战练习:
合并工作表中的数据:
import sys
import openpyxl
# 按列合并工作表:
def mergeByCols(file_path, sheet1, sheet2, target_sheet, target_file_path):
# 指定操作的工作簿:
wb = openpyxl.load_workbook(file_path)
# 获取工作簿中的工作表:
ws1 = wb[sheet1]
ws2 = wb[sheet2]
target_ws = wb[target_sheet]
# 获取工作表最大列数:
max_cols_ws1 = openpyxl.utils.get_column_letter(ws1.max_column)
max_cols_ws2 = openpyxl.utils.get_column_letter(ws2.max_column)
# 获取工作中每一列元素列表:
cols_list_ws1 = ws1[f"A:{max_cols_ws1}"]
cols_list_ws2 = ws1[f"A:{max_cols_ws2}"]
data = cols_list_ws1 + cols_list_ws2
for i in range(len(data)):
for j in range(len(data[i])):
target_ws.cell(row=j + 1, column=i + 1, value=data[i][j].value)
wb.save(target_file_path)
# 按行合并工作表:
def mergeByRows(file_path, sheet1, sheet2, target_sheet, target_file_path):
# 指定操作的工作簿:
wb = openpyxl.load_workbook(file_path)
data1 = list(wb[sheet1])
data2 = list(wb[sheet2])
data = data1 + data2
for i in range(len(data)):
for j in range(len(data[i])):
wb[target_sheet].cell(i + 1, j + 1, data[i][j].value)
wb.save(target_file_path)
def main(argv):
if argv[0] == "mergeByCols":
mergeByCols(argv[1], argv[2], argv[3], argv[4], argv[5])
elif argv[0] == "mergeByRows":
mergeByRows(argv[1], argv[2], argv[3], argv[4], argv[5])
print("Finish !!!")
if __name__ == '__main__':
main(sys.argv)
# python .\数据表格操作.py merge E:/artificial_intelligence/study/SIG/study_project/test.xlsx Sheet Sheet1 Sheet2 E:/artificial_intelligence/study/SIG/study_project/test02.xlsx
更多推荐
已为社区贡献9条内容
所有评论(0)