Чтение Excel на стороне сервера

Мне нужно разработать сервис и установить его в коробку w2003 для чтения файлов Excel, а затем обработать его информацию. Процесс заключается в следующем: пользователи будут загружать файлы Excel с использованием FTP, а затем мой сервис должен взять эти файлы, проверить и затем обновить базу данных SQL Server.

Приложение отлично работает на моем компьютере, но на сервере оно запрашивает библиотеки, но когда я пытаюсь установить основные сборки взаимодействия MS Office 2003, система отображает сообщение "Пожалуйста, установите Microsoft Office 2003 перед установкой продукта".

Я предпочел бы держаться подальше от любого обновления сервера, так как мы должны требовать ОК и т. Д., Поэтому есть простой способ просто читать файлы Excel без необходимости устанавливать какое-либо обновление на сервере.

любые комментарии приветствуются.

Спасибо, m0dest0.

пс. используя vb.net и 2008.

3 ответа

Решение

Использование Interop на сервере НЕ поддерживается MS - см. http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757

Поскольку Windows Vista MS ввела несколько мер безопасности, которые не позволяют службе Windows выполнять "настольные" вещи... это означает, что вам придется обойти несколько мер безопасности, чтобы заставить ее работать (НЕ рекомендуется!).

Для работы с Excel в серверном сценарии существует несколько вариантов (бесплатных и коммерческих):

Я могу порекомендовать Aspose.Cells и Flexcel... не пробовал SpreadsheetGear, но слышал + читал много хорошего об этом...

Бесплатные опции (но только для более нового формата xlsx!), Например, OpenXML 2 от MS и EPPlus.

Я использую Excel Data Reader (http://exceldatareader.codeplex.com/), когда мне нужно обработать файлы Excel. Он обрабатывает файлы xls и xlsx без проблем, и я запустил его в нескольких приложениях на серверной ОС. Каждый лист сохраняется как объект DataTable, и каждая "ячейка" в DataTable соответствует ячейке Excel с тем же адресом. В зависимости от того, как вы настроили свою ссылку на SQL-сервер, может потребоваться не слишком много преобразования для выгрузки содержимого в БД.

Для решения без установки каких-либо последних версий Windows Server..... Я не уверен в точном коде VB.NET, но вы легко сможете сделать это на любом компьютере, используя драйверы Microsoft OLEDB, которые должны быть доступным на любой последней версии Windows Server или может быть установлен с бесплатной загрузки с веб-сайта Microsoft для очень старых версий Windows Server. Я попытаюсь псевдокодировать это, так что вам придется адаптировать его для VB.NET. Обратите внимание, что для ссылки на ваши поля по имени первая строка выбранной области на рабочем листе должна содержать имена полей в значениях столбцов. В противном случае вам просто нужно будет использовать числовые значения для индексации каждого возвращаемого поля по позиции столбца.

Set objExcelConnection = CreateObject("ADODB.Connection")
objExcelConnection.Provider = "Microsoft.Jet.OLEDB.4.0"
objExcelConnection.ConnectionString = "Data Source=d:\path\to\excel\file\on\your\server.xls;Extended Properties=""Excel 8.0;IMEX=1;"";"
objExcelConnection.CursorLocation = 3
objExcelConnection.Open


sSQL = "select * from [worksheetname$]"
set rsWorksheet = objExcelConnection.Execute(sSQL)
do while not rsWorksheet.Eof
    sValue = rsWorksheet("FieldName")
    rsWorksheet.MoveNext
loop
rsWorksheet.Close

set objExcelConnection = nothing
Другие вопросы по тегам