web-dev-qa-db-fra.com

Lire les données de la colonne Excel dans la liste Python

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

5
user3848207

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.

2
user3848207

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?

6
Stael