将 Word doc 或 docx 文件转换为文本文件?
-
12-09-2019 - |
题
我需要一种转换方法 .doc
或者 .docx
扩展至 .txt
无需安装任何东西。显然我也不想手动打开 Word 来执行此操作。只要它在自动运行。
我认为 Perl 或 VBA 都可以解决这个问题,但我在网上找不到任何东西。
有什么建议么?
解决方案
注意,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__
其他提示
一个简单的Perl唯一的解决办法对于尝:
使用 档案::Zip 得到的
word/document.xml
文件从你的docx
文件。(A word只是一个压缩的档案。)使用 XML::用于 来分析它。
然后使用 XML::LibXSLT 把它改造成文或html格式。搜索的网络寻找一个漂亮 docx2txt.xsl 文件:)
干杯!
J.
有关.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'
我强烈推荐 假设词 如果你会 Java 或 .NET。无需安装 Word,它就可以在所有主要文本文件类型之间进行转换。
如果您已经安装UNIX的一些味道,你可以用“弦”实用程序来查找和提取文档的所有可读的字符串。会有一些混乱之前,你正在寻找的文字后,但结果将是可读的。
请注意,您还可以使用 开发办公室 执行各种文档、绘图、电子表格等。Windows 和 *nix 平台上的转换。
您可以通过编程方式访问 OpenOffice(类似于 Windows 上的 COM) 乌诺 来自存在 UNO 绑定的多种语言,包括通过 Perl OpenOffice::UNO 模块。
上 OpenOffice::UNO 页面 您还会发现一个可打开文档的示例 Perl scriptlet,您只需将其导出到 txt
通过使用 document.storeToURL()
方法——参见 Python 示例 它可以轻松地适应您的 Perl 需求。
.医生使用 WordprocessingML 和 .尝的XML格式 可以有自己的XML分析,以检索的实际文本的文件。你得读它们的规格图找出哪些标记含有可读的文本。
该方法的Sinan Ünür运作良好。
然而,我得到了一些崩溃的文件,我是转型。
另一种方法是使用Win32::奥莱和Win32::剪贴板这样的:
- 打开Word文档
- 选择的所有文本
- 复制的剪贴板
- 打印内容的剪贴板在txt文件
- 空白的剪贴板和关闭的Word文档
根据剧本给过Sigvald Refsu在 http://computer-programming-forum.com/53-perl/c44063de8613483b.htm, 我想出了以下脚本。
注:我选择了保存文文件具有相同的基本部分。word文件,并在同一文件夹,但这很容易可以改变
###########################################
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;
}
希望这可以帮助你。
您不能做到这一点在VBA,如果你不想启动Word(或其他Office应用程序)。即使你的意思是VB,你还是不得不启动Word的(隐藏)实例做处理。
我需要一种方法来转换.doc或.docx的不必安装任何东西为.txt
for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done
只需开玩笑。
您可以使用的 antiword 的为老版本的Word文档,并试图解析新的XML。
使用 docxtemplater ,你可以很容易地得到一个字的全文(与DOCX只适用)。
下面是代码(Node.js的)
DocxTemplater=require('docxtemplater');
doc=new DocxTemplater().loadFromFile("input.docx");
result=doc.getFullText();
这是只有三个行代码,并且不依赖于任何字实例(所有纯JS)