2017-03-14 3 views
0

Je suis en mesure de trouver la dernière ligne et j'ai mon jeu de variables, mais je reçois cette erreur: Cet objet ne supporte pas l'énumérationEssayer d'écrire à la ligne suivante (python/win32com)

## Export Severity to Qualy Data ## 
## access excel application and open active worksheet ## 
Excel = win32.gencache.EnsureDispatch('Excel.application') 
Excel.Visible = False 
wb = Excel.Workbooks.Open('Qualys Data.xlsx') 
sh = wb.ActiveSheet 

## Find last row ## 
lastRow = sh.UsedRange.Rows.Count 
next_Row = lastRow+1 
print("Next row to print: ", next_Row) 

## Can i loop through the document, if on last_Row/print to last row? 
for line in sh: 
    if desired_row == next_Row: 
     sh.Range("A1:A1").Value = reportDate 

print("Exporting to data to new spreadsheet...") 
time.sleep(1) 

Excel.DisplayAlerts = 0 
wb.SaveAs('Qualys Data.xlsx') 
Excel.DisplayAlerts = True 

Excel.Quit() 

Fondamentalement, je veux écrire à la dernière ligne si sur la dernière ligne, next_Row va imprimer le numéro de ligne à écrire à

Répondre

0

Il n'est pas possible de itérer sur wb.ActiveSheet ce qui explique pourquoi vous obtenez le message d'erreur.

Si vous essayez juste d'ajouter une seule cellule au fond de la première ligne, vous pouvez simplement écrire directement à cette cellule, aucune énumération est nécessaire:

import win32com.client as win32 
from datetime import datetime 
import time 

reportDate = datetime.now() 

Excel = win32.gencache.EnsureDispatch('Excel.application') 
Excel.Visible = False 

wb = Excel.Workbooks.Open(r'e:\python temp\Qualys Data.xlsx') 
ws = wb.ActiveSheet 

## Find last row ## 
lastRow = ws.UsedRange.Rows.Count 
next_Row = lastRow + 1 
print("Next row to print: ", next_Row) 

ws.Cells(next_Row, 1).Value = reportDate 

print("Exporting to data to new spreadsheet...") 
time.sleep(1) 

Excel.DisplayAlerts = 0 
wb.SaveAs('Qualys Data.xlsx') 
Excel.DisplayAlerts = True 
Excel.Quit() 

Cela se fait à l'aide ws.Cells(next_Row, 1).Value = reportDate

Dans cet exemple, il suffit d'ajouter la date et l'heure actuelles.


Pour écrire une liste à la dernière ligne utilisez ce qui suit:

data = ["cell 1", "cell 2", "cell 3", "cell 4"] 
ws.Range(ws.Cells(next_Row, 1), ws.Cells(next_Row, len(data))).Value = data 
+0

qui fonctionne parfaitement, mais je voudrais ajouter d'autres cellules en fonction de la colonne, comme colonne b, c, d, e, f, g et h à la même ligne – davidjbeiler

+0

Vous pouvez également écrire une liste entière, j'ai ajouté un exemple. –