J'ai besoin d'extraire des données tabulaires à partir d'un fichier MS-Word. Le code auquel je me suis référé ne récupère que les première et dernière lignes, mais je dois aller chercher la table entière.Récupérer des données tabulaires à partir d'un fichier MS-Word
Plus tard, les données récupérées doivent être vérifiées si le même nom de fichier existe dans le dossier.
Je ne suis même pas capable de comprendre le déroulement du code, étant donné que je suis nouveau dans le module Win32::OLE
.
J'ai fait référence à une question similaire concernant l'extraction de données sur ce site, mais je n'ai pas pu l'obtenir.
S'il vous plaît laissez-moi savoir comment procéder.
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw(catfile);
use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
my $word = get_word();
$word->{DisplayAlerts} = wdAlertsNone;
$word->{Visible} = 1;
my $doc = $word->{Documents}->Open('D:\A.doc');
my $tables = $word->ActiveDocument->{'Tables'};
for my $table (in $tables) {
my $tableText = $table->ConvertToText({ Separator => wdSeparateByTabs });
print "Table: " . $tableText->Text() . "\n";
}
$doc->Close(0);
sub get_word {
my $word;
eval { $word = Win32::OLE->GetActiveObject('Word.Application'); };
die "[email protected]\n" if [email protected];
unless (defined $word) {
$word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
or die "Oops, cannot start Word: ", Win32::OLE->LastError, "\n";
}
return $word;
}
MISE À JOUR: A.doc
Article No. Count No Committee
A0029 A0029 16 E01.07
B0028 B0028 34 E04.09
C0036 C0036 17 E09.00
D0033 D0033 15 E08.07
sortie CMD
D:\Word>A.pl
D0033 D0033 15 E08.07No Committee
Vous devez consulter le [Word Developer Reference] (https://msdn.microsoft.com/en-us/library/office/ff841702% 28v = office.14% 29.aspx) qui liste toutes les classes disponibles avec leurs propriétés et méthodes. Mais je ne vois pas pourquoi votre code devrait aller chercher seulement les première et dernière lignes. La méthode 'Table.ConvertToText' renvoie un objet' Range', qui correspond essentiellement aux positions de début et de fin de la table. Et la propriété 'Range.Text' est juste le texte entre ces deux positions, donc peu de choses peuvent mal se passer. Regardez-vous cela sur une console? – Borodin
Etes-vous capable de publier votre document Word afin que nous puissions l'essayer nous-mêmes? – Borodin
@Borodin: Je le vois sur la console (cmd) et je lance le programme en tant que D: \> A.pl J'ai essayé le code dans divers fichiers doc qui a plusieurs lignes ainsi que seulement sur deux rangs, mais je reçois la même sortie .. – flora