Архитектура приложения Excel - PullRequest
11 голосов
/ 01 декабря 2010

после 10 лет программирования я столкнулся с непростой задачей создания моего первого приложения Excel в Excel 2007. Я уже программировал в VBA на MS Access, так что для меня это не техническая задача, а реальное изменение "парадигма", смею сказать.

Теперь мне нужно реализовать приложение Excel, которое взаимодействует с SQLServer (в созданной мной выделенной базе данных), типичным материалом CRUD, но то, что я не могу прочитать ни в одной книге (Библия Excel, Power Power Programming и т. Д.), как я должен структурировать приложение.

  • Могу ли я дать имена своим столбцам и использовать их в качестве столбца базы данных при отправке данных обратно на SQLServer

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

  • Если я хочу использовать нормализованные данные, например для LookupTable (ID, Страна), я должен сохранить идентификатор, информацию о стране в диапазоне и, если да, как заставить пользователя выбрать значение из этого диапазона ( Идентификатор, Страна) без использования правильного Combobox?

  • Когда я получаю данные из SQLServer, я должен смоделировать их в набор ADODB.Recordset (например, путем вызова представления или хранимой процедуры) и скопировать их в лист, убедившись, что порядок полей в наборе записей равен так же, как в листе или есть лучший способ?

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

Спасибо.

1 Ответ

8 голосов
/ 01 декабря 2010

Я написал пару приложений, похожих на ту, которую вы описали, и хотя я не могу притворяться, что предлагаю лучшую практику Я могу комментировать, основываясь на своем личном опыте.

• Могу ли я дать имена своим столбцам и использовать их в качестве столбца базы данных при отправке данных обратно в SQLServer

Конечно, почему нет, вы можете добавить имена столбцов в качестве первой строки таблицы Excelи использовать функции защиты ячеек, чтобы предотвратить вмешательство конечного пользователя.Вам нужно как-то связать столбцы данных в Excel с базовыми полями в SQL Server, и это так же хорошо, как и любой другой.

• Если я хочу использовать нормализованные данные, такие как для LookupTable (ID), Страна) следует ли хранить идентификатор, информацию о стране в диапазоне и, если да, как заставить пользователя выбрать значение из этого диапазона (идентификатор, страна) без использования соответствующего поля со списком?

Вы можете создавать отдельные (скрытые) листы для каждой таблицы поиска и применять выбор, используя код, подобный следующему (на основе записи макроса, чтобы ее можно было очистить)


    With Sheet1.Range("E3").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=B2:B5"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "A sample"
        .ErrorTitle = "An error"
        .InputMessage = "Input message"
        .ErrorMessage = "Error message"
        .ShowInput = True
        .ShowError = True
    End With

Этодаст вам поле со списком в ячейке, сообщение об ошибке при неудачной проверке и заголовок для ячейки.

• Когда я получаю обратно данные о том, что ожидается от приложения для работы с электронными таблицами, для которого я, например, получаю идентификатор, Описание (скрытие идентификатора в столбце и отображение описания) или я должен просто использовать описание для всего и хранить денормализованные данные в моем SQLSerВер таблицы, что делает их эквивалентом листа Excel на стороне сервера?

Это будет работать в любом случае.Я бы, наверное, решил, исходя из сложности данных.Если вам нужно создать много проверочного кода в VBA, у меня возникнет соблазн перенести денормализованные данные в промежуточные таблицы в SQL Server, а затем денормализовать с помощью сохраненных процедур перед перемещением данных в основные таблицы.YMMV.

• Когда я получаю данные из SQLServer, я должен смоделировать их в ADODB.Recordset (например, путем вызова представления или хранимой процедуры) и скопировать их в лист, убедившись, что порядокполей в наборе записей такой же, как в листе, или есть лучший способ?

Я бы не стал использовать копирование и вставку, так как в нем используется системный буфер обмена, и могут начаться странные вещи, есливы используете компьютер одновременно.У объекта диапазона в Excel есть метод CopyFromRecordset, который можно использовать для передачи данных из ADO на лист.Это намного быстрее, чем перебирать назначение набора записей вручную.Единственным недостатком является то, что вам придется самостоятельно создавать столбцы заголовков.

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