Автоматизация импорта в Excel

Я полностью остановился: мне нужно импортировать данные из Excel в базу данных Microsoft SQL Server 2008. Некоторые столбцы, начиная с определенных строк, содержат данные, которые мне нужно извлечь и правильно вставить в базу данных, а сам файл предоставляется в виде потока.

Я изучал решение Microsoft Excel 12.0 Object Library, но, похоже, оно зависит от того, установлен ли Office в производственной среде? Или можно развернуть приложение в среде, где Office не установлен?

Я также взглянул на Excel Data Reader, но, похоже, он не работает для документов xlsx или Office 2010, жалуясь на "плохую подпись файла".

Каковы ваши рекомендации?

4 ответа

Решение

Excel Data Reader должен быть в порядке. Вы использовали:

//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

открыть файл xlsx?

Я использую Microsoft.Office.Interop.Excel для анализа файлов Excel. Обычно, да, на компьютере, на котором развернут компьютер, должен быть установлен Office, что поместит библиотеки Interop в глобальный кэш сборок. Я обхожу это путем копирования DLL в проект развертывания. Вы также можете попробовать встроить библиотеку взаимодействия в вашу сборку.

Вот пример использования взаимодействия: http://support.microsoft.com/kb/302084

Если вы просто читаете данные и вам известно, что вы от них хотите, я обычно просто использую OLEDB для чтения данных, а затем делаю с ними то, что мне нужно.

Быстрый пример с использованием DbDataReader для быстрого прохода по строкам, давая ConnectionString и SheetName

using System.Data.Common;
using System.Data.OleDb;

using (OleDbConnection connection = new OleDbConnection(ConnectionString))
{
    connection.ConnectionString = ConnectionString;
    connection.Open();
    using (DbCommand command = connection.CreateCommand())
    {
        command.CommandText = "SELECT * FROM [" + SheetName + "]";
        using (DbDataReader DR = command.ExecuteReader())
        {
            while (DR.Read())
            {
            // Read your data here.
            }
        }
    }
}

Другой пример можно найти здесь.

У вас была возможность попробовать: http://spread.grapecity.com/spread-services/ или https://www.nuget.org/packages/Spread.Services/? Он предоставляет вам комплексный API-интерфейс для работы с электронными таблицами, совместимыми с Microsoft Excel, без установки MS Office на целевых компьютерах.

Другие вопросы по тегам