سؤال

أحاول فتح ملف .DOC وقراءة المحتوى الخاص به. لكن لا يمكنني العثور على أي طريقة لأفعل ذلك دون إطلاق Msword.

الآن لدي الكود التالي:

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
object nullObject = System.Reflection.Missing.Value;
object file = @"C:\doc.doc";
Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(ref file, ref nullObject, ref nullObject,
         ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
         ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
         ref nullObject);
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
string text = data.GetData(DataFormats.Text).ToString();
doc.Close(ref nullObject, ref nullObject, ref nullObject);
app.Quit(ref nullObject, ref nullObject, ref nullObject);

لكنه يطلق Msword ، أي حل للقيام بذلك دون إطلاق؟

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

المحلول

احتمالان: إما الاستخدام مواصفات Microsoft لكتابة محلل الخاص بك لتنسيق .doc ، أو استخدام مكتبة موجودة لهذا الغرض (على سبيل المثال ، من أسوأ). ما لم يكن لديك بضع سنوات احتياطية لقضاء المهمة ، فمن الواضح أن هذا الأخير هو الخيار الصحيح.

نصائح أخرى

آخر مرة فعلت هذا (عبر COM من C ++) ، أتذكر خاصية "مرئية" في واجهة التطبيق (True = Visible).

ومع ذلك ، يبدو لي أن الافتراضي كان خاطئًا ، لذلك كان عليك تعيينه على صواب لإظهار الكلمة.

بغض النظر عما إذا كان بإمكان المستخدم رؤية Word أم لا ، فستظل ترى Winword.exe (أو أي شيء يطلق عليه اليوم) في مدير المهام الخاص بك. لا أعتقد أن هناك طريقة للوصول إلى Word من خلال هذه الواجهة دون تشغيل كلمة (وراء الكواليس أم لا).

إذا كنت لا تريد تشغيل Word على الإطلاق ، فقد تضطر إلى العثور على حل آخر.

أضف مساحة الاسم باستخدام مرجع إضافة-> Browse-> code7248.word_reader.dll

قم بتنزيل DLL من عنوان URL المحدد:

SourceForge.net/p/word-reader/wiki/home

(مكتبة .NET بسيطة متوافقة مع .NET 2.0 و 3.0 و 3.5 و 4.0 لـ C#. يمكنها حاليًا استخراج النص الخام فقط من ملف .DOC أو .DOCX.)

رمز العينة في وحدة التحكم البسيطة في C#:

using System;
using System.Collections.Generic;
using System.Text;
//add extra namespaces
using Code7248.word_reader;


namespace testWordRead
{
    class Program
    {
        private void readFileContent(string path)
        {
            TextExtractor extractor = new TextExtractor(path);
            string text = extractor.ExtractText();
            Console.WriteLine(text);
        }
        static void Main(string[] args)
        {
            Program cs = new Program();
            string path = "D:\Test\testdoc1.docx";
            cs.readFileContent(path);
            Console.ReadLine();
        }
    }
}

إنه يعمل بشكل جيد.

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