如何在不使用perl中的WIN32 :: OLE的情况下阅读MS office文档(excel,word),以便我们可以在任何我们想要的地方(如服务器)进行。
答案 0 :(得分:3)
您可以使用Spreadsheet::ParseExcel
来读取MS excel文件,Spreadsheet::WriteExcel
来编写MS excel文件。
欲了解更多信息,请参阅以下链接。
https://metacpan.org/pod/Spreadsheet::WriteExcel https://metacpan.org/pod/Spreadsheet::ParseExcel
对于编写MS Word文档(仅限RTF,.doc格式),您可以尝试使用RTF :: Writer 更多细节https://metacpan.org/pod/distribution/RTF-Writer/lib/RTF/Writer.pm
use RTF::Writer;
my $rtf = RTF::Writer->new_to_file("greetings.rtf");
$rtf->prolog( 'title' => "Greetings, hyoomon" );
$rtf->number_pages;
$rtf->paragraph(
\'\fs40\b\i', # 20pt, bold, italic
"Hi there!"
);
$rtf->close;
my $doc = RTF::Writer->new_to_file("greetings.doc");
$doc->prolog( 'title' => "Greetings, hyoomon" );
$doc->number_pages;
$doc->paragraph(
\'\fs40\b\i', # 20pt, bold, italic
"Hi there!"
);
$doc->close;
要阅读MS Word文档,您可以使用Text :: Extract :: Word https://metacpan.org/pod/Text::Extract::Word
# object-based interface
use Text::Extract::Word;
my $file = Text::Extract::Word->new("test1.doc");
my $text = $file->get_text();
my $body = $file->get_body();
my $footnotes = $file->get_footnotes();
my $headers = $file->get_headers();
my $annotations = $file->get_annotations();
my $bookmarks = $file->get_bookmarks();
# specify :raw if you don't want the text cleaned
my $raw = $file->get_text(':raw');
# legacy interface
use Text::Extract::Word qw(get_all_text);
my $text = get_all_text("test1.doc");
请注意RTF :: Writer或Text :: Extract :: Word不适用于.docx扩展名。
由于
答案 1 :(得分:2)
如果您想要的只是文件的文本内容,则更容易使用:
soffice --headless --convert-to txt:text file_to_convert.docx
如果你真的想要提取样式和布局,你需要一个XML解析器和许多努力工作。