2009-06-24 6 views
4

Je collecte des données via un script Perl. Les données doivent être examinées et traitées par d'autres utilisateurs d'Excel. Actuellement, j'écris les données sous la forme d'un fichier texte délimité par des tabulations, et Excel peut ouvrir cela très bien. Cependant, il existe une hiérarchie entre les données et il est plus facile pour les réviseurs de voir une arborescence plutôt qu'une liste non hiérarchique. Autrement dit, plutôt que de présenter les données en colonnes,Comment puis-je créer un fichier texte de sorte que lorsqu'il est ouvert dans Excel, les lignes sont regroupées?

foo foo1 
foo foo2 
foo foo3 
bar bar1 
bar bar2 
... 

présente comme un click-to-expand arbre:

foo 
    foo1 
    foo2 
    foo3 
bar 
    bar1 
    bar2 
... 

fonction du groupe d'Excel (trouvé en 2007 sous la rubrique « données> Aperçu> Groupe ") est un bon match pour cette présentation, étant un peu plus simple à utiliser que les tableaux croisés dynamiques.

Quelle est la manière la plus simple pour nous de passer de cette liste de colonnes à cette liste groupée? Idéalement, je pourrais écrire les données dans un formulaire texte qu'Excel appliquerait automatiquement au regroupement lors de l'importation. Sinon, s'il y avait un petit nombre d'étapes que le réviseur pouvait appliquer après l'importation des données, comme l'application d'une macro ou d'un modèle, cela serait également OK.

Répondre

3

Puisque vous utilisez déjà perl, je vous suggère de créer le fichier excel directement en Perl à l'aide de l'excellent module CPAN Spreadsheet::WriteExcel qui a un support pour Excel outlines.

Works quelque chose comme ceci:

 . 
    . 
    $worksheet->write('A2', 'foo'); 
    $worksheet->write('B3', 'foo1'); 
    $worksheet->write('B4', 'foo2'); 
    $worksheet->write('B5', 'foo3'); 
    $worksheet->set_row(2, undef, undef, 0, 1, 1); 
    $worksheet->set_row(3, undef, undef, 0, 2); 
    $worksheet->set_row(4, undef, undef, 0, 2); 
    $worksheet->set_row(5, undef, undef, 0, 2); 
    . 
    . 
+0

Cela semble prometteur. Investigating ... –

+0

Les docs sont un peu minces dans ce domaine, mais les exemples sont bons et faciles à suivre. –

+0

Le doc est assez bien ici: http://search.cpan.org/dist/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm#OUTLINES_AND_GROUPING_IN_EXCEL Maintenant, je dois juste pour voir si je peux obtenir ce module installé . –

1
  1. Sélectionnez toutes les lignes, y compris les en-têtes de colonne, dans la liste que vous souhaitez filtrer.

    ShowTip Cliquez sur la cellule supérieure gauche de la plage, puis faites-la glisser vers la cellule inférieure droite.

  2. Dans le menu Données, pointez sur Filtrer, puis cliquez sur Filtre avancé.
  3. Dans la boîte de dialogue Filtre avancé, cliquez sur Filtrer la liste, en place.
  4. Cochez la case Enregistrements uniques uniquement, puis cliquez sur OK.

    La liste filtrée est affichée et les lignes en double sont masquées.

  5. Dans le menu Edition, cliquez sur Presse-papiers Office.

    Le volet des tâches du Presse-papiers est affiché.

  6. Assurez-vous que la liste filtrée est toujours sélectionnée, puis cliquez sur le bouton Copier la copie.

    La liste filtrée est mise en surbrillance avec des contours de délimitation et la sélection apparaît sous forme d'élément en haut du Presse-papiers.

  7. Dans le menu Données, pointez sur Filtrer, puis cliquez sur Afficher tout.

    La liste originale est ré-affichée.

  8. Appuyez sur la touche SUPPR.

    La liste d'origine est supprimée.

  9. Dans le Presse-papiers, cliquez sur l'élément de la liste filtrée.

    La liste filtrée apparaît au même emplacement que la liste d'origine.

+0

Je ne cherche pas à supprimer des lignes en double. –

1

Les versions récentes d'Excel (2003 est ce que nous utilisons ici) peuvent utiliser un format XML, xlsx. Un fichier xlsx est un fichier zip d'un fichier XML. Si vous voulez créer un fichier qui s'ouvrira dans Excel avec les paramètres souhaités, essayez ceci: créez d'abord un fichier modèle avec le groupe que vous voulez. Enregistrez-le en tant que xlsx. Décompressez le fichier en utilisant votre logiciel zip standard. Jetez un oeil à ce qu'il y a à l'intérieur. Je n'ai pas travaillé avec le groupement en particulier, mais toutes les commandes de votre feuille de calcul seront au format XML, vous devrez déterminer où le groupement est défini. Ensuite, il s'agit de faire les changements appropriés au xml et re-zipping. Un peu d'effort, mais vous pouvez utiliser cette méthode pour créer par programmation des fichiers pré-groupés. Il peut y avoir des bibliothèques Perl spécifiquement orientées vers cela, je ne sais pas.

+0

J'ai fourré dans les fichiers décompressés. La tâche de déchiffrer les formats de stockage et de les pirater est assez décourageante. –

0

Un fichier CSV est également très facile à générer. OpenOffice vous permet de choisir comment analyser les choses, mais excelle les colonnes séparées par des virgules (sans aucun type de citation) et les lignes délimitées par CRLF.

A1,A2,A3 
B1,B2,B3 

etc.

+0

Comment cela m'aide-t-il à créer un arbre? –

Questions connexes