将Word doc或docx文件转换为文本文件?

Che*_*eso 12 perl vba doc docx text-files

我需要一种转换.doc.docx扩展的方法,.txt而无需安装任何东西.我也不想手动打开Word来显然这样做.只要它在auto上运行.

我在想Perl或VBA可以做到这一点,但我也无法在网上找到任何东西.

有什么建议?

jej*_*eje 12

一个简单的Perl唯一解决方案:

  1. 使用Archive :: Zipword/document.xml从您的docx文件中获取文件.(docx只是一个压缩档案.)

  2. 使用XML :: LibXML来解析它.

  3. 然后使用XML :: LibXSLT将其转换为文本或html格式.在网上找到一个不错的docx2txt.xsl文件:)

干杯!

J.


Sin*_*nür 9

请注意,Microsoft Office应用程序的一个极好的信息来源是对象浏览器.您可以通过访问Tools→交通Macro→交通Visual Basic Editor.进入编辑器后,单击F2以浏览Microsoft Office应用程序提供的接口,方法和属性.

以下是使用Win32 :: OLE的示例:

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;

my $word = get_word();
$word->{Visible} = 0;

my $doc = $word->{Documents}->Open(catfile $ENV{TEMP}, 'test.docx');

$doc->SaveAs(
    catfile($ENV{TEMP}, 'test.txt'),
    wdFormatTextLineBreaks
);

$doc->Close(0);

sub get_word {
    my $word;
    eval {
        $word = Win32::OLE->GetActiveObject('Word.Application');
    };

    die "$@\n" if $@;

    unless(defined $word) {
        $word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
            or die "Oops, cannot start Word: ",
                   Win32::OLE->LastError, "\n";
    }
    return $word;
}
__END__
Run Code Online (Sandbox Code Playgroud)


Nic*_*ler 5

对于.doc,我在linux命令行工具antiword上取得了一些成功。它可以非常快速地从.doc中提取文本,从而可以很好地呈现缩进。然后,您可以将其通过管道传送到bash中的文本文件。

对于.docx,我已经使用OOXML SDK,就像其他一些用户提到的那样。它只是一个.NET库,使使用OOXML文件压缩的​​OOXML的工作变得更加容易。如果您仅对文本感兴趣,则有很多元数据将要丢弃。我已经看到一些其他人编写的代码:DocXToText

我发现Aspose.Words也具有非常简单的API,并具有强大的支持。

来自commandlinefu.com的bash命令也可以通过解压缩.docx来工作:

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
Run Code Online (Sandbox Code Playgroud)