J'ai passé la plus grande partie du week-end à essayer de trouver la meilleure façon de transférer des données d'une table MS Access vers une feuille Excel à l'aide de Python. J'ai trouvé quelques modules qui peuvent aider (execsql, python-excel), mais avec mes connaissances limitées et les modules que je dois utiliser pour créer certaines données (je suis un professionnel SIG, donc je crée des données spatiales en utilisant le module ArcGIS ArcPy dans une table d'accès)

Je ne sais pas quelle devrait être la meilleure approche. Tout ce que je dois faire est de copier 4 colonnes de données d'accès à Excel, puis de formater Excel. J'ai résolu la partie de formatage.

Devrais-je:

Itérer à travers les lignes en utilisant un curseur et en quelque sorte charger les lignes dans Excel? Copiez les colonnes de l'accès à Excel? Exporter la table d'accès entière dans une feuille dans Excel?

Merci pour toutes suggestions.

1
Mike 3 oct. 2011 à 04:23

5 réponses

Meilleure réponse

J'utilise actuellement le module XLRD pour aspirer des données à partir d'une feuille de calcul Excel et un curseur d'insertion pour créer une classe d'entités, qui fonctionne très bien.

Vous devriez pouvoir utiliser un curseur de recherche pour parcourir les enregistrements de classe d'entités, puis utiliser le module XLWT Python (http: //www.python-excel.org/) pour écrire les enregistrements dans Excel.

1
Daniel Joyce 4 oct. 2011 à 04:13

J'ai finalement trouvé un moyen de le faire. Je pensais que je publierais mon code pour quiconque pourrait rencontrer la même situation. J'utilise certains fichiers SIG, mais si vous ne le faites pas, vous pouvez définir une variable sur un chemin de répertoire au lieu d'utiliser env.workspace et utiliser une recherche de curseur au lieu de la fonction arcpy.SearchCursor, alors c'est faisable.

import arcpy, xlwt
from arcpy import env
from xlwt import Workbook

# Set the workspace. Location of feature class or dbf file. I used a dbf file.
env.workspace = "C:\data"

# Use row object to get and set field values
cur = arcpy.SearchCursor("SMU_Areas.dbf")

# Set up workbook and sheet
book = Workbook()
sheet1 = book.add_sheet('Sheet 1')
book.add_sheet('Sheet 2')

# Set counter
rowx = 0

# Loop through rows in dbf file.
for row in cur:
    rowx += 1
    # Write each row to the sheet from the workbook. Set column index in sheet for each column in .dbf
    sheet1.write(rowx,0,row.ID)
    sheet1.write(rowx,1,row.SHAPE_Area/10000)
    book.save('C:\data\MyExcel.xls')

del cur, row
3
Mike 4 oct. 2011 à 18:37

La meilleure approche pourrait être de ne pas utiliser Python pour cette tâche.

Vous pouvez utiliser l'enregistreur de macros dans Excel pour enregistrer l'importation des données externes dans Excel. Après avoir démarré l'enregistreur de macros, cliquez sur Data -> Get External Data -> New Database Query et entrez vos critères. Une fois l'importation des données terminée, vous pouvez consulter le code qui a été généré et remplacer les critères de recherche codés en dur par des variables.

1
Mitch Wheat 3 oct. 2011 à 00:35

Vous pouvez utiliser ADO pour lire les données d'Access (voici les chaînes de connexion pour Access 2007+ (fichiers .accdb ) et Access 2003 - (fichiers .mdb)) et utiliser Excel Méthode Range.CopyFromRecordset (en supposant que vous utilisent Excel via COM) pour copier l'intégralité du jeu d'enregistrements dans Excel.

1
Idan Arye 3 oct. 2011 à 00:34

Une autre idée - quelle est l'importance de la partie mise en forme? Si vous pouvez abandonner le formatage, vous pouvez sortir vos données au format CSV. Excel peut ouvrir des fichiers CSV, et le format CSV est beaucoup plus simple que le format Excel - il est si simple que vous pouvez l'écrire directement à partir de Python comme un fichier texte, et de cette façon, vous n'aurez pas besoin de jouer avec les objets COM Office.

1
Idan Arye 3 oct. 2011 à 14:30