Python批量处理工作簿和工作表的实现示例

批量新建并保存工作簿

代码

1

2

3

4

5

6

7

8

9

10

11

import xlwings as xw

# 启动 Excel,但不新建工作簿

app = xw.App(visible=True,add_book=False)

for i in range(5):

 #新建工作簿

    workbook = app.books.add()

    #保存工作簿

    workbook.save(f'test{i}.xlsx')

    #将工作簿关闭

    workbook.close()

批量打开一个文件夹中的打开工作簿

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import xlwings as xw

import os

# 给出工作簿所在的文件夹路径

path_file = r'E:/python1/python_module'

# 列出该文件夹中所有的子文件或子文件夹

file_list = os.listdir(path_file)

# 启动Excel

app = xw.App(visible=True,add_book=False)

for i in file_list:

    # 判断文件是否为 Excel文件

    if os.path.splitext(i)[1] =='.xlsx':

        #打开

        app.books.open(i)

批量重命名一个工作簿的所有工作表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import xlwings as xw

# 启动Excel

app = xw.App(visible=True,add_book=False)

# 打开工作簿

workbook = app.books.open('table.xlsx')

#获取工作簿的所有工作表

worhsheets = workbook.sheets

for i in range(len(worhsheets)):

    # 重命名工作表

    worhsheets[i].name = worhsheets[i].name.replace('销售','')

#另存重命名后的工作簿

workbook.save('table1.xlsx')

#退出Excel程序

app.quit()

批量重命名多个工作簿

不过这是有前提条件的,要重命名的工作簿名必
须是有规律的,如表1、表2、表3;或者含有相同的关键字。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import xlwings as xw

import os

# 给出工作簿所在的文件夹路径

path_file = r'E:/python1/python_module'

# 列出该文件夹中所有的子文件或子文件夹

file_list = os.listdir(path_file)

old_book_name = '销售表'

new_book_name = '分部销售表'

# 启动Excel

app = xw.App(visible=True,add_book=False)

for i in file_list:

    if i.startswith('~$'):

        continue

    # 执行查找和替换,生成新的工作簿名

    new_file = i.replace(old_book_name,new_book_name)

    # 构造需要重命名工作簿的完整路径

    old_path_filr = os.path.join(path_file,i)

    #构建重命名后工作簿的完整路径

    new_path_file = os.path.join(path_file,new_file)

    # 重命名

    os.rename(old_path_filr,new_path_file)

if i.startswith('~$'):

continue

因为Excel会在使用过程中生成一些文件名以”~$”开头的临时文件,如果有这些文件就跳过。

批量重命名多个工作簿中的同名工作表

步骤

  • 打印出文件夹中所有子文件的名称
  • 与文件夹路径拼接成完整的文件名后,打开
  • 遍历文件中的所有工作表,如果名字相同就更改
  • 保存工作表目录

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import xlwings as xw

import os

# 给出工作簿所在的文件夹路径

path_file = r'E:/python1/python_module'

# 列出该文件夹中所有的子文件或子文件夹

file_list = os.listdir(path_file)

old_sheet = 'sheet1'

new_sheet = '员工信息'

app = xw.App(visible=True,add_book= False)

 # 遍历工作簿

for i in path_file:

    if i.startswith('~$'):

        continue

    # 拼接出完整路径

    old_path_file = os.path.join(path_file,i)

    # 打开工作簿

    workbook = app.books.open(old_path_file)

    # 遍历工作表

    for j in workbook.sheets:

        if j.name == old_sheet:

            j.name = new_sheet

    # 保存工作簿

    workbook.save()

app.quit()

将一个工作簿的所有工作表批量复制到其他工作簿

步骤:

  • 获取目标(复制到的)文件夹的所有子文件
  • 打开源文件(被复制的),并获取其所有的工作表信息。
  • 遍历所有的子文件,如果是Excel文件就打开
  • 在目标工作簿中新增工作表
  • 将来源工作表的数据写入新增工作表中

代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import xlwings as xw

import os

# 给出工作簿所在的文件夹路径

path_file = r'E:/python1/python_module'

# 列出该文件夹中所有的子文件或子文件夹

file_list = os.listdir(path_file)

app = xw.App(visible=True,add_book= False)

workbook = app.books.open('来源工作簿路径')

worksheet = workbook.sheets

 # 子文件

for i in path_file:

    if os.path.splitext(i)[1] =='.xlsx':

        # 打开工作簿

        workbooks = app.books.open(path_file+'/'+i)

        # 遍历工作表

        for j in worksheet:

            # 读取工作表中的信息

            contents = j.range('A1').expand('table').value

            # 读取工作表的名称

            name = j.name

            # 增加同名的工作表

            workbooks.sheets.add(name = name,after = len(workbooks.sheets))

            # 写入数据

            workbooks.sheets[name].range('A1').value = contents

        # 保存工作簿

        workbook.save()

app.quit()

.expand()是xlwings模块中的函数,用于扩展选择范围。语法格式如下

expand(mode) 默认值是 ‘table’,表示向整个数据表扩展。也可以是’down’(下方)或’right’(右方)

按条件将一个工作表拆分为多个工作簿

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import  os

import xlwings as xw

filr_path = 'e:\\table\\产品统计表.xlsx'

sheet_name = '统计表'

app = xw.App(visible = True ,add_book= False)

# 打开工作簿

workbooh = app.books.open(filr_path)

# 获取指定的工作表

worksheet = workbooh.sheets[sheet_name]

# 读取工作表中的所有信息

value = worksheet.range('A2').expand('table').value

# 创建一个空字典用于按产品名称来分类存放数据

data = dict()

#按行遍历工作表数据

for i in range(len(value)):

    # 获取当前行的第一个空格中的数据

    product_name = value[i][1]

    # 如果没有该产品

    if product_name not in data:

        # 创建一个与当前行名称对应的空列表

        data[product_name] = []

    # 将当前数据追加当列表中

    data[product_name].append(value[i])

for key,value in data.items():

    # 新建目标工作簿

    new_workbook = app.books.add()

    #新建工作表

    new_sheet = new_workbook.sheets.add(key)

    # 将要拆分的工作表的列标题复制到新建的工作表中

    new_sheet['A1'].value = worksheet['A1:H1'].value

    # 将数据复制

    new_sheet['A2'].value = value

    new_workbook.save('{}.xlsx'.format(key))

app.quit()

 

 

《Python批量处理工作簿和工作表的实现示例》

    原文作者:拉姆哥的小屋
    原文地址: https://blog.csdn.net/weixin_44603934/article/details/123813740
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞