目录

一、安装openpyxl库:

二、openpyxl操作工作簿结构数据:

1.工作簿的新建和保存:

2.打开修改工作簿:

打开指定工作表:

工作表的创建、修改、删除:

3.获取单元格:

4.获取一个区域内所有单元格数据:

获取指定区域的单元格数据:

单元格数字和字母之间的转换:

工作表的最大最小行和列:

5.单元格数据的修改:

向指定单元格写入数据:

追加工作表内容:

在工作表中插入数据:

删除工作表指定行和列:

6.移动和冻结单元格:

移动单元格:

 冻结单元格:

三、实战练习:

合并工作表中的数据:


一、安装openpyxl库:

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.9 documentationicon-default.png?t=M1L8https://openpyxl.readthedocs.io/en/stable/

 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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐