转换Word文档或docx文件为文本文件?(Convert Word doc or docx fil

2019-06-25 14:41发布

我需要一种方法来转换.doc.docx扩展.txt无需安装任何东西。 我也不想必须手动打开Word来显然做到这一点。 只要运行它的汽车。

我在想,是Perl或者VBA可以做的伎俩,但无论我不能在网上找到任何东西。

有什么建议?

Answer 1:

请注意,Microsoft Office应用程序信息的极好来源为对象浏览器 。 您可以通过访问ToolsMacroVisual 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__


Answer 2:

一个简单的Perl只为DOCX的解决方案:

  1. 使用档案::邮编拿到word/document.xml从文件docx文件。 (A DOCX只是一个压缩文档)。

  2. 使用XML ::的libxml解析它。

  3. 然后使用XML ::的libxslt将其转化为文本或HTML格式。 SEACH网上找到一个很好的docx2txt.xsl文件:

干杯!

J.



Answer 3:

我强烈建议AsposeWords如果你能做到Java或.NET。 它可以转换,没有安装Word,所有主要的文本文件类型之间。



Answer 4:

如果你安装了UNIX的一些味道,你可以用“弦”实用程序来查找和提取文档的所有可读的字符串。 会有一些混乱之前,你正在寻找的文字后,但结果将是可读的。



Answer 5:

对于.DOC,我已经取得了一些成功的Linux命令行工具antiword 。 它提取自.DOC文本速度非常快,给人压痕良好呈现。 然后,你可以通过管道将要在bash的文本文件。

对于.DOCX,我使用的OOXML SDK其他一些用户提及。 这仅仅是一个.NET库,以使其更容易与在一个OOXML文件压缩了的OOXML工作。 有很多,你会想放弃,如果你只在文字感兴趣的元数据。 其他一些人已经写我看到的代码: DocXToText 。

使用Aspose.Words有很大的支持非常简单的API嫌我已经找到。

还有一个从commandlinefu.com运作在解压的.docx这个bash命令:

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


Answer 6:

请注意,您还可以使用OpenOffice的 ,以在Windows和* nix平台上执行杂项文件,图纸,等试算表等转换。

您可以通过编程访问OpenOffice的(在某种程度上类似于在Windows COM) UNO从各种语言的其中UNO结合存在,包括通过的Perl 的OpenOffice :: UNO模块。

在OpenOffice的UNO ::页面 ,你还会发现它打开的文档的示例Perl小脚本,那么所有你需要做的是将它导出到txt使用document.storeToURL()方法-看到一个Python的例子 ,可以很容易地适合你的Perl的需求。



Answer 7:

.DOC的使用的WordprocessingML中和的.docx的XML格式,可以有自己的XML解析检索文档的实际文本。 你必须阅读它们的规格来确定哪些代码包含可读文本。



Answer 8:

思南Ünür的方法效果很好。
但是,我得到了一些崩溃与我正在改变的文件。

另一种方法是使用的Win32 :: OLE和Win32 ::剪贴板这样:

  • 打开Word文档
  • 选择所有的文本
  • 复制剪贴板
  • 打印剪贴板的内容在一个txt文件
  • 清空剪贴板和关闭Word文档

基于由Sigvald Refsu给出的剧本http://computer-programming-forum.com/53-perl/c44063de8613483b.htm ,我想出了下面的脚本。

注:我选择保存名称一样.docx文件,并在同一个文件夹的txt文件,但这可以很容易地改变

########################################### 
use strict; 
use File::Spec::Functions qw( catfile );
use FindBin '$Bin';
use Win32::OLE qw(in with); 
use Win32::OLE::Const 'Microsoft Word'; 
use Win32::Clipboard; 

my $monitor_word=0; #set 1 to watch MS Word being opened and closed

sub docx2txt {
    ##Note: the path shall be in the form "C:\dir\ with\ space\file.docx"; 
    my $docx_file=shift; 

    #MS Word object
    my $Word = Win32::OLE->new('Word.Application', 'Quit') or die "Couldn't run Word"; 
    #Monitor what happens in MS Word 
    $Word->{Visible} = 1 if $monitor_word; 

    #Open file 
    my $Doc = $Word->Documents->Open($docx_file); 
    with ($Doc, ShowRevisions => 0); #Turn of revision marks 

    #Select the complete document
    $Doc->Select(); 
    my $Range = $Word->Selection();
    with ($Range, ExtendMode => 1);
    $Range->SelectAll(); 

    #Copy selection to clipboard 
    $Range->Copy();

    #Create txt file 
    my $txt_file=$docx_file; 
    $txt_file =~ s/\.docx$/.txt/;
    open(TextFile,">$txt_file") or die "Error while trying to write in $txt_file (!$)"; 
    printf TextFile ("%s\n", Win32::Clipboard::Get()); 
    close TextFile; 

    #Empty the Clipboard (to prevent warning about "huge amount of data in clipboard")
    Win32::Clipboard::Set("");

    #Close Word file without saving 
    $Doc->Close({SaveChanges => wdDoNotSaveChanges});

    # Disconnect OLE 
    undef $Word; 
}

希望它可以帮助你。



Answer 9:

你不能做到这一点在VBA,如果你不想启动Word(或其他Office应用程序)。 即使你的意思是VB,你还是不得不启动Word的(隐藏)实例做处理。



Answer 10:

我需要一种方法来转换.doc或.docx的不必安装任何东西为.txt

for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done

只是在开玩笑。

您可以使用antiword为老版本的Word文档,并试图解析新的XML。



Answer 11:

随着docxtemplater ,你可以很容易地得到一个字的全文(与DOCX只适用)。

下面的代码(Node.js的)

DocxTemplater=require('docxtemplater');
doc=new DocxTemplater().loadFromFile("input.docx");
result=doc.getFullText();

这仅仅是三行代码,并且不依赖于任何字实例(所有纯JS)



文章来源: Convert Word doc or docx files into text files?