2016-06-03 3 views
0

J'utilise win32com pour charger un document Excel existant. Je suis actuellement en mesure de faire une boucle dans les feuilles et de supprimer l'habillage et l'auto-ajustement des colonnes.Charger un fichier Excel existant, modifier le niveau de zoom pour toutes les feuilles et supprimer le quadrillage

import win32com.client 
excel = win32com.client.Dispatch('Excel.Application') 
excel.Visible = False # I want to keep it this way 


path = "C:\\Users\\username\\Documents\\DDA" 
wb_new = excel.Workbooks.Open(path + '\\new_file.xlsx') 

# wb_new is a file with three tabs, with one value in cell A1 each... 
# ...if you want to recreate it. 

active_sheets = wb_new.Sheets.Count 
for i in range(0, active_sheets): 
    ws = wb_new.Worksheets(i + 1) 
    ws.Columns.WrapText = False 
    ws.Columns.AutoFit() 

Ensuite, je voudrais ajuster le niveau de zoom et supprimer le quadrillage pour toutes les feuilles. Je n'ai pas trouvé une solution qui accomplit ceci sans faire excel.Visible = True. Je suis ouvert à l'utilisation d'un paquet de python-excel.org mais je n'ai rien trouvé.

Je suis tombé sur le sous-paquet openpyxl.worksheet.views qui contient la classe SheetView, mais cela ne semble pas être utile pour les documents existants.

+0

'AttributeError: la propriété ' .Zoom' ne peut pas être set' est le résultat de' ws.Zoom = '75' –

+0

AttributeError: la propriété ' .DisplayGridlines' ne peut pas être set.' est le résultat de 'ws.DisplayGridlines = False' –

+0

Désolé, cette propriété doit être définie via un objet' Window', c'est-à-dire 'excel.ActiveWindow.Zoom = 75' et' excel.ActiveWindow.DisplayGridlines = False'. – Squall

Répondre

0
import win32com.client 
excel = win32com.client.Dispatch('Excel.Application') 
excel.Visible = False # I want to keep it this way 


path = "C:\\Users\\username\\Documents\\DDA" 
wb_new = excel.Workbooks.Open(path + '\\new_file.xlsx') 

# wb_new is a file with three tabs, with one value in cell A1 each... 
# ...if you want to recreate it. 

active_sheets = wb_new.Sheets.Count 
for i in range(0, active_sheets): 
    ws = wb_new.Worksheets(i + 1) 
    ws.Columns.WrapText = False 
    ws.Columns.AutoFit() 
    ws.Activate() # answer starts here 
    excel.ActiveWindow.Zoom = 80 
    excel.ActiveWindow.DisplayGridlines = False