簡體   English   中英

將Word doc或docx文件轉換為文本文件?

[英]Convert Word doc or docx files into text files?

我需要一種方法將.doc.docx擴展名轉換為.txt而不安裝任何東西。 我也不想手動打開Word來顯然這樣做。 只要它在auto上運行。

我在想Perl或VBA可以做到這一點,但我也無法在網上找到任何東西。

有什么建議?

一個簡單的Perl唯一解決方案:

  1. 使用Archive :: Zipdocx文件中獲取word/document.xml文件。 (docx只是一個壓縮檔案。)

  2. 使用XML :: LibXML來解析它。

  3. 然后使用XML :: LibXSLT將其轉換為文本或html格式。 在網上找到一個不錯的docx2txt.xsl文件:)

干杯!

J.

請注意,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__

對於.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,我強烈推薦AsposeWords 它可以在沒有安裝Word的情況下轉換所有主要文本文件類型。

如果你安裝了一些unix風格,你可以使用'strings'實用程序從文檔中查找並提取所有可讀字符串。 在您要查找的文本之前和之后會有一些混亂,但結果將是可讀的。

請注意,您還可以使用OpenOffice在Windows和* nix平台上執行各種文檔,繪圖,spreadhseet等轉換。

您可以通過UNO以編程方式(以類似於Windows上的COM的方式)從存在UNO綁定的各種語言(包括來自Perl的OpenOffice :: UNO模塊)訪問OpenOffice

OpenOffice :: UNO頁面上,您還將找到一個打開文檔的示例Perl scriptlet,然后您需要做的就是使用document.storeToURL()方法將其導出到txt - 請參閱Python示例 ,該示例很容易適應您的Perl需求。

.doc使用WordprocessingML.docx的XML格式可以解析其XML以檢索文檔的實際文本。 您必須閱讀他們的規范以確定哪些標簽包含可讀文本。

SinanÜnür的方法效果很好。
但是,我正在改變我正在改造的文件。

另一種方法是使用Win32 :: OLE和Win32 :: Clipboard:

  • 打開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; 
}

希望它可以幫助你。

如果您不想啟動Word(或其他Office應用程序),則無法在VBA中執行此操作。 即使你的意思是VB,你仍然需要啟動一個(隱藏的)Word實例來進行處理。

我需要一種方法將.doc或.docx擴展名轉換為.txt而不安裝任何東西

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

只是在開玩笑。

您可以對舊版本的Word文檔使用antiword ,並嘗試解析新版本的xml。

使用docxtemplater ,您可以輕松獲取單詞的全文(僅適用於docx)。

這是代碼(Node.JS)

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

這只是三行代碼,並不依賴於任何單詞實例(所有普通的JS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM