Как я могу читать файлы MS Office на сервере без установки MS Office и без использования библиотеки взаимодействия?

StackOverflow https://stackoverflow.com/questions/153079

Вопрос

Библиотека взаимодействия работает медленно и требует установки MS Office.Часто вы не хотите устанавливать MS Office на серверах.

Я хотел бы использовать Апач POI, но я использую .NET.

Мне нужно только извлечь текстовую часть файлов, а не создавать и не «хранить информацию» в файлах Office.

Должен вам сказать, что у меня очень большая библиотека документов, и я не могу преобразовать ее в новые XML-файлы.

Я не хочу писать анализатор двоичных файлов.За нас это делает такая библиотека, как Apache POI.К сожалению, это только для платформы Java.Возможно, мне стоит подумать о написании этого приложения на Java.

Я до сих пор не нашел альтернативы POI с открытым исходным кодом в .NET, думаю, напишу собственное приложение на Java.

Это было полезно?

Решение

Для всех версий MS Office:

Для нового Офиса (2007 г.):

Для старого Офиса (до 2007 года):

  • Старые форматы Office теперь документированы: http://www.microsoft.com/interop/docs/officebinaryformats.mspx.Если вы хотите сделать что-то действительно простое, вы можете попробовать это сделать.Но имейте в виду, что эти форматы ОЧЕНЬ сложны.

Другие советы

Проверьте Аспозировать компоненты.Они созданы для имитации функций Interop без необходимости полной установки Office на сервере.

Поскольку новые форматы docx по своей сути являются файлами на основе XML, вы можете создавать их и манипулировать ими программно с помощью стандартных методов XML DOM, как только вы узнаете структуру.

Файлы в основном представляют собой zip-архивы с альтернативным расширением.Использовать System.IO.Packaging пространство имен, чтобы получить доступ к внутренним элементам файла, а затем открыть их в XmlDocument для выполнения манипуляции.

Для этого существуют примеры, и, возможно, стоит поискать вдохновение в проекте Office Open XML на SourceForge.

Что касается старых двоичных форматов, они были собственностью MS, и единственный способ получить содержимое изнутри — это использовать объектную модель Office (требуется установка Office) или сторонний конвертер/анализатор файлов.

К сожалению, для платформы .NET нет ничего собственного и встроенного для работы с этими файлами.

Что вам нужно делать с этими файлами?Если вы просто хотите передать их пользователю, то базовые потоки файлов подойдут.Если вы хотите создать новые файлы (возможно, на основе шаблона) для отправки пользователю, которые он сможет открыть в Office, существует множество обходные пути.

Если вы на самом деле храните данные в документах Office для использования на своем веб-сайте, вы делаете это неправильно.Документы Office, даже электронные таблицы Excel и базы данных доступа, на самом деле не являются подходящим выбором для использования на интерактивном веб-сайте.

Если документ имеет формат Word 2007, вы можете использовать библиотеку system.io.packaging для программного взаимодействия с ним.

РВенди

В мире Java также есть JExcelApi.Написано очень четко, насколько я мог видеть, намного чище, чем POI.Так что, возможно, даже о портировании этого кода на .NET не может быть и речи, если, конечно, у вас достаточно времени.

ОпенОфис.

Вы можете запрограммировать его, и он многое сделает за вас, не тратя деньги на лицензию для сервера или не имея связанной с ним уязвимости на своем сервере.

Книги Microsoft Excel можно читать с помощью драйвера ODBC (или это драйвер OLE DB?не могу вспомнить), что делает книгу похожей на таблицу базы данных.Но я не знаю, доступен ли этот драйвер без самого пакета Office.

Вы можете использовать OpenOffice.Он имеет инструмент преобразования командной строки:

Как конвертировать

Короче говоря, вы определяете макрос в OpenOffice, и вы называете этот макрос с аргументом командной строки для OpenFice.В этом аргументе имя локального файла (файл офиса) кодируется.

Это не лучшее решение, но оно должно быть работоспособным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top