J'utilise python xlwings pour lire une colonne de données dans Excel 2013. La colonne A
est remplie de chiffres. Pour importer cette colonne dans une liste python py_list
, j'ai le code suivant;
import xlwings as xw
wb = xw.Book('BookName.xlsm')
sht = xw.Book('SheetName')
py_list = sht.range('A2:A40').value
Le code ci-dessus fonctionne si les données de la colonne sont renseignées à A2:A40
. Cependant, les données de colonne peuvent continuer à croître. Les données peuvent croître et s'étendre à A2:A46
ou A2:A80
. La dernière ligne est vide. On ne sait pas au moment de la compilation combien de lignes de données sont dans cette colonne.
Comment puis-je modifier le code pour détecter la cellule vide à la dernière ligne afin que la plage de données puisse être lue par py_list
?
Je suis ouvert à l'utilisation d'autres bibliothèques Python pour lire les données Excel en plus de xlwings. J'utilise python v3.6
Après beaucoup d'essais et d'erreurs, je vais répondre à ma propre question.
La clé de cette question consiste à déterminer le nombre de lignes de la colonne A
.
Le nombre de lignes peut être trouvé avec cette seule ligne en utilisant xlwings ci-dessous;
rownum = sht.range('A1').end('down').last_cell.row
Il faut lire attentivement la documentation de l'API pour obtenir la réponse.
http://docs.xlwings.org/fr/stable/api.html#xlwings.Range
Une fois que le nombre de lignes est trouvé, il est facile de déterminer le reste.
Je dis beaucoup de choses sur la lecture de fichiers à partir de csv ou d'Excel, mais j'utiliserais pandas
.
import pandas as pd
df = pd.read_Excel('filename.xlsm', sheetname=0) # can also index sheet by name or fetch all sheets
mylist = df['column name'].tolist()
une alternative serait d'utiliser une formule dynamique utilisant quelque chose comme OFFSET dans Excel au lieu de 'A2:A40'
, ou peut-être une plage nommée?