Python调用接口合并Excel表代码实例

在工作中经常遇到需要打开许多个excel表格,然后合并的需求,合并的同时要求格式必须原汁原味的保留。利用VBA代码可以比较轻松的解决,现在我们来看Python中如何实现。

上代码:

from openpyxl import Workbook

from win32com.client import Dispatch

import os

import datetime

def copy_excel_file(source_file_list, destination_file):

run_app = Dispatch('Excel.Application')

run_app.Visible = False # 改为True可以看到excel的打开窗口

for file in source_file_list:

source_workbook = run_app.Workbooks.Open(Filename=file)

destination_workbook = run_app.Workbooks.Open(Filename=destination_file)

source_workbook.Worksheets(1).Copy(Before=destination_workbook.Worksheets(1))

destination_workbook.Close(SaveChanges=True)

run_app.Quit()

class ParameterGenerator:

def __init__(self):

# self.directory_path = directory_path

self.file_lists = []

def creat_xlsx(self, directory_path):

obj = Workbook()

if not os.path.exists(directory_path + os.sep + 'joined'):

os.mkdir(directory_path + os.sep + 'joined')

date = str(datetime.datetime.today())[0:10]

obj.save(directory_path + os.sep + 'joined' + os.sep + 'joined {}.xlsx'.format(date))

def get_file_list(self, directory_path):

entry_lists = os.scandir(directory_path)

for entry_list in entry_lists:

if entry_list.is_file():

if '~$' not in entry_list.path:

self.file_lists.append(entry_list.path)

return self.file_lists

def run(self, directory_path):

file_lists = self.get_file_list(directory_path)

self.creat_xlsx(directory_path)

destination_file = str(self.get_file_list(directory_path + os.sep + 'joined')[-1])

file_lists.pop(-1)

return file_lists, destination_file

if __name__ == "__main__":

directory_path = r'D:\Excel目录'

param = ParameterGenerator()

source_file_list, destination_file = param.run(directory_path)

copy_excel_file(source_file_list, destination_file)

输出是文件夹下新建一个'joined‘的文件夹,里面有一个合并后的文件'joined xxxx-xx-xx.xlsx',如下:

目前发现有两个需要注意的问题:

1. 需要合并的文件中不能有隐藏的表格,否则,会跳过该文件;

2. 文件名中不可以字符意外的标记,比如括号之类的。

最后,调用接口的速度有点慢,以后有机会还是看openpyxl是否可以实现一下,含格式的合并。xlwings是类似的实现,估计速度也差不多的慢。

以上是 Python调用接口合并Excel表代码实例 的全部内容, 来源链接: utcz.com/z/323288.html

回到顶部