Comment par programmation interface une feuille de calcul Excel ?

J'ai une demande pour certains travaux d'une organisation qui utilise Excel comme une base de données et qui veut faire un travail sur les données Excel via une base de données réelle. (Oui, je sais, jamais esprit...)

Le client dispose d'une feuille Excel qu'ils utilisent en interne pour suivre certains programmes du gouvernement. Les données de cette feuille Excel utilisé pour importer manuellement dans une base de données SQL via CSV comme format intermédiaire et disponible via une app web minuscules modifications soit la feuille de calcul ou la db ont été effectué manuellement (par des personnes différentes) et devaient être gardés en synchronisation manuellement.

Les spécifications pour les nouvelles fonctionnalités comprennent :

  • Télécharger le fichier Excel dans l'application web
  • apporter des modifications mineures par le biais de l'application web (ce bit est, bien sûr, une évidence)
  • parfois l'exportation des données vers Excel

La feuille de calcul (en fait, c'est un couple d'entre eux dans un classeur) met en œuvre des lignes directrices nécessaires pour interagir avec d'autres institutions et a donc le même rester structurellement avant et après l'importation. Il contient beaucoup de mise en forme, les colonnes masquées et les boutons de tri ainsi que beaucoup de liaisons de données entre les cellules dans les différentes fiches.

Je ne veux pas avoir à reproduire la feuille de calcul de zéro à livrer à l'exportation, ni je veux extraire manuellement les colonnes appropriées en CSV avant de faire l'importation. Je cherche plutôt un moyen de charger l'Excel, « requête » certains domaines, les écrire à la DB et plus tard charger les données de la DB et de manipuler uniquement le contenu des cellules appropriées.

Y a-t-il un moyen de l'interface par programmation avec une feuille de calcul existante et seulement lire ou modifier les bits dont vous avez besoin ?

répondre #1

Nous allons lire et manipuler Excel-données via Apache POI, qui n'est pas complète dans le décodage des fichiers Excel (à savoir la formule cellules ne sont pas complètement supportés), mais nos clients sont très heureuses avec nous.

POI est une bibliothèque Java, donc si vous êtes un pur Windows boutique on peut être d'autres options plus naturelles, mais comme je l'ai dit, notre expérience avec le PVE est très bon, les gens sont heureuses.

De plus : Je crois avoir entendu des pilotes ODBC Excel - peut-être est-ce qui vous manque et des besoins ? (Désolé, que je n'ai jamais travaillé avec eux)

répondre #2

Excel est une « Application Capable de COM », et comme tel, vous pouvez utiliser COM d'accéder et de manipuler les données dans un document Excel. Vous ne dites pas quelle plate-forme que vous utilisez - mais si c'est .net il est vraiment très facile. Voir http://support.microsoft.com/kb/302084 pour savoir comment démarrer avec c#.

Si vous n'utilisez pas .net n'importe quelle langue qui peut interagir avec un composant COM fonctionnera.

répondre #3

Vous ne spécifiez pas une langue, donc si vous êtes agnostique langage .net vous donne certaines classes très puissants pour le traitement des données :

pour ouvrir un fichier csv :

System.Data.OleDb les importations, les importations Excel = Microsoft.Office.Interop.Excel

    Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DataFolder + "\;Extended Properties='text;HDR=Yes'"

    Dim conn As New System.Data.OleDb.OleDbConnection(ConnectionString)
    conn.Open()

    Dim CommandText As String = CommandText = "select * from [" + CSVFileName + "]"
    If Filter.Length > 0 Then
        CommandText += " WHERE " + Filter
    End If

    Dim daAsset As New OleDbDataAdapter(CommandText, conn)
    Dim dsAsset As New DataSet
    daAsset.Fill(dsAsset, "Asset")

ouverture d'une feuille dans un classeur est très similaire - vous spécifiez le nom de feuille et pouvez ensuite remplir un DataSet avec la feuille entière - vous pouvez alors accéder au Tables().Rows() du DataSet pour chaque ligne et sur le terrain, effectuer une itération sur chaque ligne, etc..

répondre #4

Vous pourriez être intéressé dans Excel 2007 fonctions de Collaboration (comme le montage d'un xls sur le web).

répondre #5

La même API qui est utilisé par VBA est disponible via une interface COM externe. Il y a un certain nombre de livres sur le sujet. Je recommande les O'Reilly un par Steven Roman mais vos goûts peuvent varier.

répondre #6

Une autre approche serait d'écrire une fonction excel qui parle directement à la base de données et renvoie le résultat dans un tableau.

Si vous pensez que cette approche serait bien vous pourriez essayer XLLoop - cela vous permet d'écrire facilement de travail excel fonctions en Java, Python, Ruby, Perl, R, Lisp, Erlang.


Tags lesen

   
 
logo_banner