Python - Appel dossier Interface fusion multiple de table Excel

Au travail ont souvent besoin rencontrés à ouvrir beaucoup tableur Excel, puis la demande combinée, combinée et le format requis doit être authentique réservé. En utilisant le code VBA peut être relativement facile à résoudre, et maintenant nous regardons la façon d'atteindre Python.

Sur le code:

du Cahier d'importation openpyxl 
de Dispatch d'importation win32com.client 
import os 
importation datetime 


def copy_excel_file (source_file_list, destination_file): 
    run_app = Dispatch ( 'Excel.Application') 
    run_app.Visible = # Faux改为vrai可以看到excel的打开窗口

    pour le fichier dans source_file_list: 
        source_workbook = run_app.Workbooks.Open (filename = fichier) 
        destination_workbook = run_app.Workbooks.Open (nom de fichier) = destination_file 

        source_workbook.Worksheets (1) .copy (avant = destination_workbook.Worksheets (1)) 
        destination_workbook.Close (SaveChanges = True) 

    run_app.Quit () 


classe parameterGenerator: 
 
    def __init __ (self):
        # self.directory_path = directory_path
        self.file_lists = [] 

    def creat_xlsx (self, directory_path): 
        obj = classeur () 
        sinon os.path.exists (directory_path + os.sep + 'rejoint'): 
            os.mkdir (directory_path + os.sep + « rejoint ') 
        date = str (datetime.datetime.today ()) [00:10] 
        obj.save (directory_path + os.sep + 'joint' + os.sep +' rejoint {} .xlsx'.format (date)) 

    def get_file_list (self, directory_path): 
        entry_lists = os.scandir (directory_path) 
        pour entry_list en entry_lists: 
            si entry_list.is_file ():  
                si '~ $' non entry_list.path:
                    self.file_lists.append (entry_list.path) 
        self.file_lists de retour 

    def exécuter (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 + 'rejoint') [- 1]) 
        file_lists.pop (-1) 
        file_lists de retour, destination_file 


si __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)


La sortie est un nouveau dossier « joint » dossier, un fichier qui a « rejoint xxxx-xx-xx.xlsx » combinée comme suit:

20200329011341

20200329011353

À l'heure actuelle, nous avons trouvé deux problèmes que l'attention nécessaire:

1. La nécessité de fusionner les fichiers ne peuvent pas avoir une forme cachée, sinon, Sauts le fichier;

2. Les noms de fichiers non caractères jeton inattendu, comme les supports et autres.


Enfin, l'interface d'appel un peu lent, ont encore l'occasion de voir ce qui peut être atteint que si openpyxl, ont été le format combiné. xlwings est mise en œuvre similaire, vitesse estimée est presque lent.

Je suppose que tu aimes

Origine www.cnblogs.com/johnthegreat/p/12590592.html
conseillé
Classement