Как извлечь текст из документов MS Office в C#

Чтобы понять , почему связывает имя таблицы (или столбца), не работает, вы должны понимать, как работают заполнители в подготовленных операциях: они не просто заменяются как строки (соответственно экранированные) , и результат SQL выполнен. Вместо этого СУБД, попросившая «подготовить» заявление, содержит полный план запросов о том, как он будет выполнять этот запрос, включая те таблицы и индексы, которые он будет использовать, которые будут одинаковыми независимо от того, как вы заполняете заполнители.

План для SELECT name FROM my_table WHERE id = :value будет таким же, как вы его замените :value, но похожее подобное SELECT name FROM :table WHERE id = :value невозможно спланировать, потому что СУБД не знает, какую таблицу вы собираетесь выбрать from.

Это не то, что библиотека абстракции, такая как PDO, может или должна работать, либо потому, что она победит две ключевые цели подготовленных операторов: 1) позволить базе данных заранее решить, как запрос будет запущен и будет использовать один и тот же план несколько раз; и 2) для предотвращения проблем безопасности путем отделения логики запроса от ввода переменной.

35
задан Elias Haileselassie 18 June 2009 в 07:20
поделиться

4 ответа

Using PInvokes you can use the IFilter interface (on Windows). The IFilters for many common file types are installed with Windows (you can browse them using this tool. You can just ask the IFilter to return you the text from the file. There are several sets of example code (here is one such example).

26
ответ дан 27 November 2019 в 06:36
поделиться

Одна из подходящих опций для извлечения текста из документов Office в C# GroupDocs. Синтаксический анализатор для.NET API. Следующее является примерами кода для извлечения простого, а также форматированного текста.

текст Извлечения

// Create an instance of Parser class
using(Parser parser = new Parser("sample.docx"))
{
    // Extract a text into the reader
    using(TextReader reader = parser.GetText())
    {
        // Print a text from the document
        // If text extraction isn't supported, a reader is null
        Console.WriteLine(reader == null ? "Text extraction isn't supported" : reader.ReadToEnd());
    }
}

Форматированный текст Извлечения

// Create an instance of Parser class
using (Parser parser = new Parser("sample.docx"))
{
    // Extract a formatted text into the reader
    using (TextReader reader = parser.GetFormattedText(new FormattedTextOptions(FormattedTextMode.Html)))
    {
        // Print a formatted text from the document
        // If formatted text extraction isn't supported, a reader is null
        Console.WriteLine(reader == null ? "Formatted text extraction isn't suppported" : reader.ReadToEnd());
    }
}

Раскрытие: Я работаю Евангелистом Разработчика в GroupDocs.

0
ответ дан 27 November 2019 в 06:36
поделиться

Однажды я сделал средство для извлечения текста из docx, и это было очень просто. В основном docx и другие (новые) форматы, которые я предполагаю, представляют собой zip-файл с кучей XML-файлов. Текст можно извлечь с помощью XmlReader и только .NET-классов.

Кажется, у меня больше нет кода :(, но я нашел человека, у которого есть подобное решение .

Может быть, это неприменимо для вас, если вам нужно читать файлы .doc и .xls, поскольку они являются двоичными форматами и, вероятно, их гораздо сложнее анализировать.

Существует также OpenXML SDK , все еще в CTP, выпущенной Microsoft.

1
ответ дан 27 November 2019 в 06:36
поделиться

Просто!

Вот эти два шага:

1) Используйте библиотеку взаимодействия с Office для преобразования DOC в DOCX
2) Используйте DOCX2TXT для извлечения текста из нового DOCX

Ссылка для 1) содержит очень хорошее объяснение того, как выполнить преобразование, и даже пример кода.

Альтернатива 2 ) - просто разархивируйте файл DOCX на C # и отсканируйте нужные файлы. Вы можете прочитать о структуре ZIP-файла здесь .

Изменить: Ах да, я забыл указать, как это сделал Скурмедель ниже, что у вас должен быть установлен Office в системе, в которой вы хотите выполнить преобразование.

2
ответ дан 27 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: