سؤال

أحتاج إلى طريقة للتحويل .doc أو .docx ملحقات إلى .txt دون تثبيت أي شيء. أنا أيضا لا أريد أن تضطر إلى فتح كلمة يدويا للقيام بذلك بشكل واضح. طالما أنها تعمل على السيارات.

كنت أفكر في أن بيرل أو VBA يمكن أن تفعل الخدعة، لكن لا يمكنني العثور على أي شيء عبر الإنترنت أيضا.

أي اقتراحات؟

هل كانت مفيدة؟

المحلول

لاحظ أن مصدر معلومات ممتاز لتطبيقات 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__

نصائح أخرى

حل بسيط فقط لحل Docx:

  1. يستخدم الأرشيف :: الرمز البريدي للحصول على word/document.xml ملف من الخاص بك docx ملف. (Docx هو مجرد أرشيف مضغوط.)

  2. يستخدم XML :: LIBXML. لتحليلها.

  3. ثم استخدام XML :: libxslt. لتحويله إلى تنسيق نص أو HTML. Seach الويب للعثور على لطيف docx2txt.xsl. ملف :)

هتافات !

ج.

ل .doc، كان لدي بعض النجاح مع أداة سطر الأوامر Linux oliteword.. وبعد يستخرج النص من .doc بسرعة كبيرة، وإعطاء تقديم جيد من المسافة البادئة. ثم يمكنك توجيه ذلك إلى ملف نصي في Bash.

ل .docx، لقد استخدمت SDK OOXML كما ذكر بعض المستخدمين الآخرين. إنها مجرد مكتبة .NET لتسهيل العمل مع OOXML مع OOXML الذي تم ضغطه في ملف OOXML. هناك الكثير من البيانات الوصفية التي تريد تجاهلها إذا كنت مهتما فقط بالنص. لقد كتب بعض الأشخاص الآخرين بالفعل الرمز الذي أراه: docxtOteXT..

aspose.words لديها واجهة برمجة تطبيقات بسيطة للغاية مع دعم كبير أيضا وجدت.

هناك أيضا أمر BASH هذا من CommandLineFu.com الذي يعمل عن طريق إلغاء تحديد .DOCX:

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

أنا أوصي بشده asosewords. إذا كنت تستطيع أن تفعل جافا أو .NET. يمكن تحويله، دون تثبيت Word، بين جميع أنواع الملفات النصية الرئيسية.

إذا كان لديك بعض نكهة UNIX المثبتة، فيمكنك استخدام الأداة المساعدة "سلاسل" للعثور على جميع السلاسل القابلة للقراءة واستخراجها من المستند. سيكون هناك بعض الفوضى قبل وبعد النص الذي تبحث عنه، ولكن النتائج ستكون قابلة للقراءة.

لاحظ أنه يمكنك أيضا استخدام مكتب مفتوح لإجراء وثيقة متنوعة، الرسم، Spreadhseet، إلخ. تحويلات على كل من منصات Windows و * NIX.

يمكنك الوصول إلى OpenOffice برمجيا (بطريقة مماثلة ل COM على Windows) عبر أون من مجموعة متنوعة من اللغات التي توجد بها ملزمة UNO، بما في ذلك من بيرل عبر OpenOffice :: uno. وحدة.

على ال OpenOffice :: صفحة UNO ستجد أيضا نموذج Perl Scriptlet الذي يفتح مستند، كل ما عليك فعله القيام به هو تصديرها إلى txt باستخدام document.storeToURL() الطريقة - انظر مثال بيونثون والتي يمكن تكييفها بسهولة مع احتياجات بيرل الخاصة بك.

.doc الذي يستخدم WordProcessingml. و تنسيق XML الخاص ب. يمكن أن يكون لديك XML الخاصة بهم لاسترداد النص الفعلي للمستند. عليك أن تقرأ مواصفاتها لمعرفة العلامات التي تحتوي على نص قابل للقراءة.

طريقة Sinan Ünür تعمل بشكل جيد.
ومع ذلك، حصلت على بعض التعطل مع الملفات التي كنت تحويلها.

طريقة أخرى هي استخدام Win32 :: OLE و Win32 :: الحافظة على هذا النحو:

  • افتح مستند Word
  • حدد كل النص
  • نسخ في الحافظة
  • اطبع محتوى الحافظة في ملف TXT
  • فارغة الحافظة وإغلاق مستند Word

بناء على البرنامج النصي الذي قدمه Sigvald Refsu في http://computer-progrogramming-forum.com/53-perl/c44063de8613483b.htm., لقد توصلت إلى البرنامج النصي التالي.

ملاحظة: اخترت حفظ ملف TXT مع نفس الاسم باسم ملف .docx وفي نفس المجلد ولكن هذا يمكن بسهولة تغييره

########################################### 
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، فلا يزال يتعين عليك بدء تشغيل مثيل (مخفي) من الكلمة للقيام بالمعالجة.

أحتاج إلى طريقة للتحويل .doc أو .docx ملحقات .txt دون تثبيت أي شيء

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

امزح فقط.

يمكنك استخدام oliteword. بالنسبة للإصدارات القديمة من مستندات Word، وحاول تحليل XML من العناصر الجديدة.

مع docxtemplater., ، يمكنك بسهولة الحصول على النص الكامل للكلمة (يعمل مع Docx فقط).

إليك الرمز (node.js)

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

هذا هو مجرد ثلاثة أسطر من التعليمات البرمجية ولا يعتمد على أي مثيل لكلمة (جميع JS عادي)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top