python
  • excel
  • win32com
  • 2015-01-11 205 views 0 likes 
    0

    有沒有一種方法可以用os.walk或glob同樣的方式來簡化它?使用win32com打開多個excel文件python

    from win32com.client import Dispatch 
    
    inputwb1 = "D:/apera/Workspace/Sounding/sounding001.xlsx" 
    inputwb2 = "D:/apera/Workspace/Sounding/sounding002.xlsx" 
    
    Sheet = 'OUTPUT' 
    excel = Dispatch("Excel.Application") 
    
    source = excel.Workbooks.Open(inputwb1) 
    source.Worksheets(Sheet).Range('F1:H500').Copy() 
    source.Worksheets(Sheet).Range('I1:K500').PasteSpecial(Paste=-4163) 
    
    source = excel.Workbooks.Open(inputwb2) 
    source.Worksheets(Sheet).Range('F1:H500').Copy() 
    source.Worksheets(Sheet).Range('I1:K500').PasteSpecial(Paste=-4163) 
    

    因爲如果我想寫幾百個這樣的東西,這個東西會佔用這麼多的空間。感謝您的幫助提前

    +0

    附註:您要撥打''Sheet' SHEET',相反,因爲它是(全球)常數。這與PEP 8一致。當我看到'Sheet'時,我認爲'Sheet'是一個類,它不是,所以這通常是令人困惑的。遵循標準慣例使您的代碼更清晰。 – EOL

    回答

    1

    你似乎幾乎回答了你自己的問題。像這樣的東西可能會做到這一點:

    import glob 
    from win32com.client import Dispatch 
    
    Sheet = 'OUTPUT' 
    excel = Dispatch("Excel.Application") 
    
    for filename in glob.glob("D:/apera/Workspace/Sounding/sounding*.xlsx"): 
        source = excel.Workbooks.Open(filename) 
        source.Worksheets(Sheet).Range('F1:H500').Copy() 
        source.Worksheets(Sheet).Range('I1:K500').PasteSpecial(Paste=-4163) 
    
    +0

    @EOL:我回滾了你的改變,因爲:A.它與這個問題無關,而且B.OP確實有變量名稱大寫,這可能意味着類似於所有CAPS在PEP8中做的事情。 – martineau

    +0

    然後,我不會把我的變化回來。但是,我建議你考慮重新實施我的改變:我強烈不喜歡給出可以被認爲不是好樣式的例子的答案,因爲它們強化了不好的做法。在這裏,使用'Sheet'而不是'SHEET'違反了PEP 8,沒有很好的理由('Sheet'表示一個類)。此外,在你的回答中遵循良好的做法仍然是重點,因爲你顯然回答了關於'glob'的問題。 – EOL

    +0

    #EOL:呃,我認爲這些比較小的東西最好留在評論中,尤其是考慮到其他PEP8命名違規似乎存在於片段中(在可能完全超出OP的控制和/或跟隨不同的指導方針,例如MS Office的API可能遵循的指導方針)。 – martineau

    1

    你可以打開多個Excel文件像這樣(例如):

    import win32com.client 
    import os 
    path = ('D:\\New Folder\\MyExcelFiles\\') 
    fileslist = os.listdir('D:\\New Folder\\MyExcelFiles\\') 
    xl = win32com.client.DispatchEx('Excel.Application') 
    xl.Visible = True 
    
    for i in fileslist : 
    xl.Workbooks.Open(path+i) 
    if xl.Cells.Find('2014'): 
        xl.Cells.Replace('2015') 
        xl.Save() 
        xl.Workbooks.Close() 
    else: 
        xl.Workbooks.Close() 
    
    相關問題