Как программно подключить электронную таблицу Excel? - PullRequest
4 голосов
/ 25 октября 2008

У меня есть запрос на некоторую контрактную работу от организации, которая использует Excel в качестве базы данных и хочет выполнить некоторую работу с данными Excel через реальную базу данных. (Да, я знаю, неважно ...)

У клиента есть лист Excel, который он использует внутри, чтобы отслеживать некоторые правительственные программы. Данные из этого листа Excel вручную импортировались в базу данных SQL через CSV в качестве промежуточного формата и были доступны через крошечное веб-приложение. Изменения в электронной таблице или в базе данных были сделаны вручную (разными людьми) и должны были синхронизироваться вручную.

Спецификация для новой функциональности включает в себя:

  • загрузить файл Excel в веб-приложение
  • вносить незначительные изменения через веб-приложение (этот бит, конечно, не составляет труда)
  • иногда экспортирует данные обратно в Excel

Электронная таблица (на самом деле это пара из них в рабочей книге) реализует некоторые руководящие принципы, необходимые для взаимодействия с другими учреждениями, и, следовательно, должна оставаться неизменной структурно до и после импорта. Он содержит много форматирования, скрытых столбцов и кнопок сортировки, а также множество ссылок на данные между ячейками на разных листах.

Мне не нужно воспроизводить электронную таблицу с нуля для доставки экспорта, а также я не хочу вручную извлекать нужные столбцы в CSV перед выполнением импорта. Я скорее ищу способ загрузить Excel, «запросить» определенные поля, записать их в БД, а затем загрузить данные обратно из БД и манипулировать только содержимым соответствующих ячеек.

Есть ли способ программно взаимодействовать с существующей электронной таблицей и только читать или изменять нужные вам биты?

Ответы [ 6 ]

10 голосов
/ 26 октября 2008

Excel является «приложением, поддерживающим COM», и поэтому вы можете использовать COM для доступа к данным в документе Excel и управления ими. Вы не говорите, какую платформу вы используете, но если это .NET, то это действительно очень просто. См. http://support.microsoft.com/kb/302084 о том, как начать работу с C #.

Если вы не используете .net, то любой язык, который может взаимодействовать с компонентом COM, будет работать.

4 голосов
/ 26 октября 2008

Тот же API, который используется в VBA, доступен через внешний интерфейс COM. На эту тему есть довольно много книг. Я рекомендую O'Reilly от Стивена Романа, но ваши вкусы могут отличаться.

3 голосов
/ 29 октября 2008

Вы не указываете язык, поэтому, если вы независимы от языка, .Net предоставляет вам очень мощные классы для обработки данных:

, чтобы открыть файл CSV:

Импортирует System.Data.OleDb, Импортирует Excel = Microsoft.Office.Interop.Excel

    Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DataFolder + "\;Extended Properties='text;HDR=Yes'"

    Dim conn As New System.Data.OleDb.OleDbConnection(ConnectionString)
    conn.Open()

    Dim CommandText As String = CommandText = "select * from [" + CSVFileName + "]"
    If Filter.Length > 0 Then
        CommandText += " WHERE " + Filter
    End If

    Dim daAsset As New OleDbDataAdapter(CommandText, conn)
    Dim dsAsset As New DataSet
    daAsset.Fill(dsAsset, "Asset")

открытие листа в рабочей книге очень похоже - вы указываете имя листа и затем можете заполнить DataSet всем листом - затем вы можете получить доступ к Tables (). Rows () DataSet для получения каждой строки и поля итерации по каждой строке и т. д.

2 голосов
/ 26 октября 2008

Мы читаем и манипулируем данными Excel через Apache POI , который не завершен при декодировании файлов Excel (а именно, ячейки формул не полностью поддерживаются), но наши клиенты нас очень радуют.

POI - это библиотека Java, поэтому, если вы работаете в чистом магазине Windows, возможны и другие более естественные варианты, но, как я уже сказал, наш опыт работы с POI очень хороший, люди счастливы.

Дополнительно: я думаю, что слышал о драйверах ODBC для Excel - может быть, это то, что вы хотите / нужно? (Извините, я никогда не работал с ними)

1 голос
/ 08 мая 2009

Другой подход заключается в написании функции excel, которая напрямую обращается к базе данных и возвращает результат в виде массива.

Если вы думаете, что этот подход будет работать хорошо, вы можете попробовать XLLoop - это позволяет вам легко писать функции Excel в Java, Python, Ruby, Perl, R, Lisp, Erlang.

1 голос
/ 25 октября 2008

Вас может заинтересовать Excel 2007 Функции совместной работы (например, редактирование xls из Интернета).

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