Actuellement, je travaille à gérer les connexions SQL à un fichier Excel via un script Python. Le script utilise xlwings pour lire et écrire dans le classeur. Malheureusement, seule la pièce «lue» fonctionne. J'ai peigné Stackoverflow depuis un bon moment aujourd'hui et personne ne semble avoir ce problème. Voici un code de débogage que j'ai écrit dans le script Python pertinent (il existe sur une feuille de calcul en tant que UDF, la feuille que j'essaye d'écrire est différente); Je ne suis pas terriblement expérimenté avec Python ou encore xlwings alors ne hésitez pas à ronchonner sur la structure/syntaxe :)xlwings problème d'écriture dans les cellules dans Excel 2010
@xw.func
def compatTest():
#use active workbook
wb = xw.Book.caller()
#does the sheet Notes exist?
if wb.sheets['Notes']:
status = "Status: "
#does A1 in Notes have a value?
if wb.sheets['Notes'].range('$A$1').value:
status += "Good"
#Can we write to the specified empty cell?
try:
wb.sheets['Notes'].range('$E$1').value = 'something'
#Nope :(
except Exception as e:
status = e.message
return status + "can't write :("
#This return statement shouldn't evaluate, just casting a wide net here
return status + " " + str(wb.sheets['Notes'].range('$A$1').value)
else:
#A1 in notes is blank
status += "Bad"
wb.sheets['Notes'].range('$E$1').value = 'nothing'
return status + " " + 'blank :('
sortie dans la cellule avec l'UDF en elle: « ne peut pas écrire :(» - cela signifie que le message d'erreur n'est pas retourné.
J'utilise les xlwings 0.11.4 add-in et référence VBA (je suis pas à l'aide du module VBA comme il semble se chevaucher avec le complément et génère VBA erreur 49 'Mauvaise convention d'appel de DLL') .Je n'ai pas touché le code du complément, car contrairement au module les paramètres ne sont pas traités dans le fichier.Les paramètres que j'ai entrés dans le ruban xlwings sont tous précis
Paramètres actuels:
OS: Windows Server 2008 R2 Enterprise (test ici en raison de restrictions, le script ne sera pas déployé ici)
Python version/distro: 2.7/Anaconda2
xlwings Version: 0.11.4
Excel version: 2010 v 14.0.7182.5000 (32 bits)
Edit:. Il est intéressant, quand j'ouvrir le fichier (après la mise à jour des liens & frapper 'Continuer' pour des liens obsolètes), la cellule avec l'affichage UDF s "Statut: Bon". Si je double cliquez sur la cellule pour réévaluer l'UDF, il se transforme en « ne peut pas écrire :(» à nouveau
Si je change le bloc, sauf à ce qui suit:.
except:
a = str(sys.exc_info()[0])
b = str(sys.exc_info()[1])
c = str(sys.exc_info()[2])
status = str(a + " \ " + b + " \ " + c)
return status
Je reçois:
"<class 'pywintypes.com_error'> \ (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None) \ <traceback object at 0x0000000007B95708>"
Edit # 2:
assez que je peux écrire à Bizarrement cellules en utilisant le xw.sub décorateur:
@xw.sub
def SomeFunction():
wb = xw.Book.caller()
wb.sheets['Notes'].range('B3').value = "hello world"
Ce code fonctionne très bien, mais je préfère courir autant que possible par des FDU si possible.