2012-06-20 5 views

Répondre

0

En effet il y en a! Et en utilisant en utilisant des macros c'est assez facile à faire.

macros habilitantes

Aller à la Outils> Options Menu et cliquez sur la section Sécurité sous OpenOffice.org. Une fois là, cliquez sur le bouton Macro Security. Maintenant, sur l'onglet niveau de sécurité, assurez-vous que vos paramètres vous permettront d'exécuter des macros.

Mes paramètres sont sur bas parce que je suis l'auteur de toutes les macros que je cours, si vous n'êtes pas sûr que ce sera votre cas, vous pouvez utiliser un réglage plus élevé.

Note: Attention, si vous êtes malchanceux ou que vous vivez dans les années 90, une macro maléfique peut causer de sérieux dommages!


Création d'une nouvelle macro

Maintenant que vous pouvez les exécuter, vous devez créer une nouvelle macro. OpenOffice accepte un large éventail de langues, y compris Python, mais puisque vous n'en avez pas spécifié, j'utiliserai ici la version de base de OO.

Accédez à Outils> Macros> Organiser les macros> OpenOffice.org Basic, et une fois là, ajoutez un nouveau module sous l'arborescence de votre fichier. Donnez-lui un nom significatif.

New


La réelle macro

Une fois que vous créez un nouveau module, l'écran de l'éditeur s'affiche, écrivez ce code ci-dessous:

Sub DataFromFile 
    Dim FileNo As Integer 
    Dim CurrentLine As String 
    Dim File As String 
    Dim Msg as String 
    Dim I as Integer 

    ' Get the filename from the cell, in this case B1. 
    currentSheet=ThisComponent.CurrentController.ActiveSheet 
    fileName = currentSheet.getCellRangeByName("B1").getString 

    ' Create a new file handler and open it for reading 
    FileNo = FreeFile 
    Open fileName For Input As #FileNo 

    I = 0 

    ' Read file until EOF is reached 
    Do While not eof(FileNo) 
     ' Read line 
     Line Input #FileNo, CurrentLine 

     ' Define the range to put the data in as A4:A999 ' 
     curentCell = currentSheet.getCellRangeByName("A4:A999").getCellByPosition(0,I) 

     ' Select the I-th cell on the defined range and put a line of the file there 
     curentCell.String = CurrentLine 

     'Increase I by one 
     I = I + 1 
    Loop 

    Close #FileNo 
End Sub 

Pour le tester, Il suffit de créer un fichier texte et d'y mettre quelque chose, puis de le placer dans la cellule B1 et d'exécuter la macro. Vous pouvez exécuter la macro de plusieurs façons, à des fins de test, utilisez simplement le bouton Exécuter de la même fenêtre que celle utilisée pour créer le module. Ceci est le résultat attendu:

Expected results

Remarque: Si vous n'êtes pas familier avec linux, ne soyez pas intimidé par ce chemin de fichier, il est à quel point ils sont sur linux. Cela fonctionnerait de la même manière avec Windows et sa structure de chemin de fichier.


Pour augmenter encore davantage la macro

J'ai écrit le code ci-dessus dans le but de le rendre aussi facile à comprendre que possible, par conséquent, la macro ont beaucoup de place pour l'amélioration, tels que:

  • Etre capable de montrer les données récupérées sur plusieurs colonnes/Une seule colonne/autre chose

Une fois que vous avez récupéré les données du fichier, vous pouvez les afficher dans votre feuille de calcul à peu près de la façon dont vous le souhaitez. Faites-moi savoir si la façon dont vous avez initialement prévu n'a pas été abordée et je vais modifier la réponse. Avoir à réexécuter la macro chaque fois que vous voulez que les données soient mises à jour.

Ceci est facilement résolu. Il y a plusieurs façons d'automatiser l'exécution de la macro, celle que je connais le mieux consiste à le faire tourner sur une boucle en conjonction avec un délai de, disons, 5 secondes et le faire démarrer dès que le fichier se charge.

Sub Main 
    Do While True 
     DataFromFile() 
     Wait(5000) 
    Loop 
End Sub 

Et à partir de maintenant, vous devriez appeler le sous principal à la place du DataFromFile.

Pour exécuter le macro au démarrage aller à Outils> Personnaliser sur les événements onglet et sélectionnez Ouvrir le document dans la liste puis cliquez sur le bouton Macro . Dans la boîte de dialogue pour sélectionner la macro, sélectionnez Main. Maintenant, fermez le document, rouvrez-le, et voilà!

  • L'utilisation de plages de cellules

Il est plus facile de garder votre code et y apporter des modifications si vous nommez les plages de cellules et d'utiliser leurs noms au lieu de leur adresse absolue. Pour nommer une plage (ou une seule cellule), vous devez d'abord la sélectionner puis cliquer sur Données> Définir plage pour lui donner un nom, par exemple B1 pourrait être appelé 'FilePath' et A4: A999 pourrait être appelé ' DataRange '. De cette façon, si vous avez besoin de les changer, vous n'avez pas besoin de changer la macro, juste le nom de la plage définie.

Ne pas oublier de mettre à jour le code pour rechercher la plage au lieu de l'adresse, par exemple, ce morceau de code:

getCellRangeByName("A4:A999") 

serait réécrite à

getCellRangeByName("DataRange") 
  • Vérification des erreurs

C'est une bonne idée de vérifier et de gérer les erreurs ou les imprévus événements. Que faire si le fichier n'existe pas? Et si c'est plus grand que la plage définie?


Pour en savoir plus

Official reference regarding files for OpenOffice Basic macros.

A guide on different ways to run a macro

A great introduction to macro programming

Questions connexes