Peut Pandas lire et modifier un seul fichier Excel feuille (onglet) sans modifier le reste du fichier?
De nombreuses feuilles de calcul formules et la mise en forme Python outils pour lire et écrire des fichiers Excel ne peut pas reproduire fidèlement. Cela signifie que n'importe quel fichier je veux créer par programmation doit être quelque chose que j'ai créer à partir de zéro, et puis d'autres fichiers Excel (avec la même sophistication) à se reporter à ce fichier (ce qui crée une variété d'autres problèmes de dépendance).
Ma compréhension de fichier Excel 'onglets' est qu'ils sont en fait juste une collection de fichiers XML. Eh bien, est-il possible d'utiliser les pandas (ou l'un des sous-jacents de lecture/écriture des moteurs de xlsxwriter ou openpyxl de modifier juste l'un des onglets, en laissant les autres onglets (avec plus méchants trucs là) intacte?
EDIT: je vais essayer de formuler le problème avec un exemple.
- Feuille Excel test.xlsx a quatre pattes (aka feuilles de calcul): Feuil1, Feuil2, Feuil3 Feuil4
- J'ai lu Feuil3 dans un DataFrame (appelons-df) à l'aide de pandas.read_excel()
- Feuil1 et Feuil2 contiennent des formules, des graphiques et des différents la mise en forme ni openpyxl ni xlrd peut analyser correctement, et Feuil4 contient d'autres données. Je ne veux pas toucher à ces onglets à tous.
- Feuil2 a vraiment des références à des cellules sur Feuil3
- Je fais quelques modifications à df et maintenant envie d'écrire de nouveau à feuil3, laissant les autres feuilles intactes (et les références à d'autres feuilles de calcul du classeur intacte)
Puis-je le faire et, si oui, comment?
Vous devez vous connecter pour publier un commentaire.
J'ai eu une question similaire concernant l'interaction entre excel et python (en particulier, les pandas), et j'ai été référé à cette question.
Grâce à quelques conseils par stackoverflow de la communauté, j'ai trouvé un paquet appelé xlwings qui semble couvrir beaucoup de fonctionnalités HaPsantran nécessaire.
Utilisation de l'OP exemple:
De travail avec un fichier excel, vous pouvez supprimer un point d'ancrage dans le bloc de données (Feuil3) que vous souhaitez importer aux pandas en le nommant dans excel et n':
wb = Workbook(Existing_file)
df = Range(Anchor).table.value
testé que cette mise en œuvre n'a pas le tempérament de formule existante dans le fichier excel
Laissez-moi savoir si cela résout votre problème et si il y a quelque chose que je peux vous aider.
Grand bravo au développeur de xlwings, ils ont rendu cela possible.
Ci-dessous est une mise à jour de ma précédente réponse après plus question de @jamzsabb, et afin de refléter un changement d'API après xlwings mise à jour >= 0.9.0.
Je suis à 90% sûr de soi la réponse à "peut
pandas
de faire cela", c'est non. L'affichage d'un négatif est difficile, car il y a toujours peut-être quelque chose d'intelligent que j'ai raté, mais voici un cas:Interface Possible moteurs sont
xlrd/xlwt/xlutils
,openpyxl
, etxlsxwriter
. Aucun ne travaux pour vos besoins, commexlrd/wt
ne prennent pas en charge toutes les formules,xlsxwriter
ne pouvez pas modifier lesxlsx
fichiers, etopenpyxl
perd les images et les graphiques.Depuis que j'ai souvent besoin de faire cela, j'ai pris uniquement à l'écriture simple sortie dans un fichier séparé et puis l'appel de la win32api directement copier les données entre les classeurs en préservant l'ensemble de mon collègue brillant de chiffres. C'est ennuyeux, parce que cela signifie que je dois le faire sous Windows au lieu de *nix, mais il fonctionne.
Si vous travaillez sous Windows, vous pourriez faire quelque chose de similaire. (Je me demande si il est judicieux d'ajouter un natif option d'insertion à l'aide de cette approche pour aider les gens dans cette situation, ou si l'on doit poster une recette.)
P. S.: Ce problème m'a ennuyé assez de temps à autre que j'ai pensé de l'apprentissage assez moderne format Excel pour ajouter le support pour les ce de l'une des bibliothèques.
P. P. S.: Mais depuis ignorant des choses que vous n'êtes pas de la manipulation et de les rendre non modifiée semble assez facile, le fait que personne ne semble à l'appui, il me fait penser il y a quelques maux de tête, et où Redmond, je suis disposé à le croire. @jean-machin doit en savoir plus, si il est sur..
xlwings
est de mettre un wrapper autour de pywin32 sur Windows et appscript sur Mac pour un multi-plateforme compatible solution de travail autour d'un peu de pywin32 de ses limites.Je suis en ajoutant une réponse qui utilise openpyxl. À partir de la version 2.5, vous pouvez conserver les graphiques dans des fichiers existants (plus de détails sur ce sujet sont disponibles ici).
Pour les besoins de la démonstration, j'ai créer un fichier xlsx en utilisant les pandas à la suite de la Fpo lignes directrices. L'onglet nommé 'Feuil2' a des formules qui référence "Feuil3" et contient un graphique.
Prévu test.xlsx après l'exécution du code ci-dessus:
Alors si nous exécutons le code ci-dessous, à l'aide de openpyxl, nous pouvons modifier les données dans "Feuil3" tout en préservant les formules et le graphique dans 'Feuil2' et la mise à jour des données est maintenant dans ce fichier.
Prévu test.xlsx après l'exécution de la deuxième bloc de code:
si vous êtes à parler de "feuilles" comme "onglets", alors il est possible de modifier simplement l'un des onglets en accédant au particulier à l'aide de la
parse(sheet_name)
fonction.un exemple est ici:
La lecture d'un fichier Excel en python à l'aide de pandas
à écrire de nouveau à excel, (tout en contrôlant les feuilles) utiliser le
to_excel
fonction, ici:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html