在perl中读取/写入没有OLE的MS office文档(excel,word)

时间:2016-12-22 04:00:53

标签: perl

如何在不使用perl中的WIN32 :: OLE的情况下阅读MS office文档(excel,word),以便我们可以在任何我们想要的地方(如服务器)进行。

2 个答案:

答案 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解析器和许多努力工作。