zoukankan      html  css  js  c++  java
  • Python

    在工作中经常遇到需要打开许多个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是类似的实现,估计速度也差不多的慢。

  • 相关阅读:
    NUTCH Exception in thread "Thread-12751" java.lang.OutOfMemoryError: PermGen space
    未登录词识别
    中文分词索引
    hadoop 存储空间满了
    nutch 生产者队列的大小如何控制 threadcount * 50
    nutch 采集到的数据与实际不符
    nutch 采集效率--设置采集间隔
    异常: http://www.ly.com/news/visa.html: java.io.IOException: unzipBestEffort returned null
    hbase 取多个版本数据
    JavaScript制作时钟特效
  • 原文地址:https://www.cnblogs.com/johnthegreat/p/12590592.html
Copyright © 2011-2022 走看看