Как перевести .doc в строку? - PullRequest
4 голосов
/ 06 января 2012

Есть ли способ перевести документ Microsoft Word в строку без использования компонента Microsoft COM? Я надеюсь, что есть какой-то другой способ справиться со всей избыточной разметкой.

ИЗМЕНИТЬ 12/13/13: Мы не хотели ссылаться на ком-компонент, потому что, если бы у клиента не была установлена ​​та же самая версия офиса, он бы не работал. К счастью, Microsoft сделала 2013 word.interop.dll обратно совместимым. Теперь нам не нужно беспокоиться об этом ограничении. После ссылки на DLL мы можем сделать следующее:

/// <summary>Gets the content of the word document</summary>
/// <param name="filePath">The path to the word document file</param>
/// <returns>The content of the document</returns>
public string ExtractText(string filePath)
{
    if (string.IsNullOrEmpty(filePath))
        throw new ArgumentNullException("filePath", "Input file path not specified.");

    if (!File.Exists(filePath))
        throw new FileNotFoundException("Input file not found at specified path.", "filepath");

    var resultText = string.Empty;
    Application wordApp = null;

    try
    {
        wordApp = new Application();
        var doc = wordApp.Documents.Open(filePath, Type.Missing, true);
        if (doc != null)
        {
            if (doc.Content != null && !string.IsNullOrEmpty(doc.Content.Text))
              resultText = doc.Content.Text.Normalize();

            doc.Close();
        }
    }
    finally
    {
        if (wordApp != null)
            wordApp.Quit(false, Type.Missing, false);
    }

    return resultText;
}

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Вам нужно будет использовать некоторую библиотеку для достижения того, что вы хотите:

Если у вас есть много времени, то можно подумать о написании парсера .DOC - здесь можно найти спецификацию .DOC здесь .

Кстати: Office Interop не поддерживается MS в серверных сценариях (например, ASP.NET или Windows Service или аналогичных) - см. http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2!

1 голос
/ 06 января 2012

Предполагая, что вы хотите извлечь текстовое содержимое файла doc, есть несколько инструментов командной строки, а также коммерческие библиотеки. Довольно старый инструмент, который мы когда-то использовали для поиска файлов doc (не docx) (в сочетании с sphider поисковой системы), был catdoc (также здесь ), который является DOS, а не Инструмент Windows, но тем не менее работал для нас, пока мы выполняли предварительные условия (формат имени файла 8.3).

Коммерческий продукт doc2txt , если вы можете позволить себе $ 29.

Для более нового формата docx вы можете использовать инструмент на основе Perl docx2txt .

Конечно, если вы хотите запустить эти инструменты из c #, вам нужно запустить внешний процесс - проверьте здесь для подробного объяснения.

Довольно дорогой, но очень мощный инструмент для доступа к документам и документам DOCX: Spire.doc , но он делает намного больше, чем нужно. Его удобнее использовать, поскольку это библиотека .NET.

0 голосов
/ 12 декабря 2013

Если вы имеете в виду более старый формат файла DOC, то это весьма проблематично, поскольку это двоичный формат файла, указанный MS, и я должен сказать, что полностью согласен с комментарием RQDQ.

Но если вы имеете в виду формат файла DOCX, вы можете достичь этого без компонента MS COM или любого другого компонента, только с чистым .NET.

Проверьте следующие решения:

http://www.codeproject.com/Articles/20529/Using-DocxToText-to-Extract-Text-from-DOCX-Files http://www.dotnetspark.com/kb/Content.aspx?id=5633

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...