excelConvertRule - Конвертация полей базы для импорта-экспорта с Excel

По работе приходиться с Excel подключаться к сайту на MODX и выгружать с него или загружать в него данные. Постепенно наработался лучший путь. В excelConvertRule редактируются правила конвертации колонки excel в колонку базы MODX. В модуле vba modx_main подготовлены функции LoadToBase для загрузки с excel в MODX и LoadToExcel обратно. В файле core/components/excelconvertrule/users_editor.xlsm, для примера, сделан редактор пользователей MODX. Используя этот пакет можно быстро сформировать нужную выгрузку(загрузку) из любых таблиц MODX.

# Использование

В админке MODX зайти в приложение excelConvertRule и настроить правила конвертации.

Для доступа к приложению пользователю назначить политику excelConvertRuleEdit. И нужен getTables. Приложение на нем сделано.
В приложении создаем имя правил конвертации:

Параметры pdoTools задают данные которые выгружаются в excel. Их можно оставить пустымыми и задавать из excel. loadModel — загружают модели базы. Обязательно при загрузке в базу, если модель не стандартная для MODX. class — в какую таблицу базы загружаются данные.
В правилах конвертации задется Тип правила, Поле базы, Колонка excel, Подпись поля, Параметры.

Типы правил:
  1. text — преобразует колонку excel в поле базы и обратно как есть.
  2. detType- устарело но мне пока на рабочем сайте нужно
  3. date- преобразует колонку excel вида 05.10.2020 в поле базы 2020-10-05 и обратно.
  4. datetime — преобразует колонки excel в поле базы и обратно как есть., например Колонка excel C,D поле базы data_otgruzki. В C 05.10.2020 в D 10:00 преобразуется в 2020-10-05 10:00
  5. manager — преобразует колонку excel с именем пользователя (fullname) в поле базы id юзера и обратно.
  6. beznal — устарело.
  7. boolean — Использую сейчас text_to_other_text .
  8. text_to_other_text — преобразует колонку excel в поле базы и обратно согластно Правилам заданным в Параметрах правила. Например поле gender Параметры
    {
        "1": "Мужской",
        "2": "Женский"
    }
В файле core/components/excelconvertrule/users_editor.xlsm, для примера, сделан редактор пользователей MODX.

В строке 15 страна изменена с США на Россия и эта строка подсвечивается. При нажатии кнопки «Отправить изменения в базу» страна у пользователя перезапишется.

Для использования в редакторе Visual Basic открыть модуль vba modx_main задать адрес сайта, логин и пароль пользователя MODX с разрешением use_excelconvertrule (политика excelConvertRule).



Function LoadToExcel(ConvertRuleName As String, SheetName As String, Optional startRow As Long = 5, _
    Optional endRow As Long = 3000, Optional myProtectSheet As String = "", _
    Optional pdoTools As Object) As Boolean
LoadToExcel — имеет параметры:
ConvertRuleName — имя правила конвертации.
SheetName — лист excel на который загружать данные.
startRow — начальная строка.
endRow — случайно затесалась, но уже удалить сложно.
myProtectSheet — пароль защиты листа.
pdoTools — параметры pdoTools для выгрузки из базы. (Кому попало разрешение use_excelconvertrule не давать!).

Function LoadToBase(ConvertRuleName As String, SheetName As String, Optional startRow As Long = 6, _
    Optional endRow As Long = 3000, _
    Optional startCol As String = "", Optional endCol As String = "", Optional testCol As String = "") As Boolean
LoadToBase — имеет параметры:
ConvertRuleName — имя правила конвертации.
SheetName — лист excel с которого выгружать данные.
startRow — начальная строка.
endRow — конечная строка.
Если не задано startCol, то в поле D1 листа имя колонки в которой проверяется на не пустое значение!!!
иначе:
startCol — начальная колонка
endCol — конечная
testCol — имя колонки в которой проверяется на не пустое значение.

Так же можно использовать getRangeToJson_All, getRangeToJson_OnlyEdited и postJsonModx

Function postJsonModx(action As String, Optional data As Variant = Nothing, Optional ShowResponse As Boolean = False) As Object
Функция делает запрос на assets/components/excelconvertrule/action.php с одним из 3
action: getConvertRule, LoadToExcel, LoadToBase.
Обьект data преобразует в json строку.
функция возращает ответ MODX.

Из админки в приложении excelConvertRule или в ecrUpLoad можно также напрямую выгрузить в excel таблицу с заданным правилом конвертации (нужно pdoTools и соответствие полей базы клонкам excel).


UPD 22.10.2020
Добавил описания и скриншотов.

modstore.pro/packages/import-and-export/excelconvertrule
Александр Туниеков
16 октября 2020, 00:37
modx.pro
4
1 546
+5
Поблагодарить автора Отправить деньги

Комментарии: 9

Александр Мельник
16 октября 2020, 12:13
0
приходиться с Excel подключаться к сайту на MODX
Вы имеете в виду — из запущенного редактора microsoft Excel вы каким-то образом связываетесь с сайтом?
    Александр Туниеков
    16 октября 2020, 13:02
    0
    Да именно так. У директора расчет заказа на excel сделан. И база заказов на нем была. Но эксель затупил и базу заказов в MODX перенесли, а расчет по прежнему в экселе. Работа с заказом идет в экселе и связываться с базой из него удобней.
      Александр Мельник
      16 октября 2020, 13:11
      0
      Спасибо. Но честно говоря даже не представляю как это возможно. Excel это закрытое программное обеспечение. Как можно его модифицировать, чтобы заставить например отправлять http запросы (ну или как там у вас организовано общение с базой.)
        Александр Туниеков
        16 октября 2020, 13:18
        +1
        ЭЭ… у Excel есть макросы, а макросы работают на VBA. Язык программирования такой Visual Basic for Application. И из него вполне спокойно шлются http запросы :-). Плюс JSONConverter for VBA и вообще что хочешь делай :-).
          Александр Мельник
          16 октября 2020, 13:41
          0
          Не знал. Про visual basic слышал, но считал что никто в мире им не пользуется)
            Александр Туниеков
            16 октября 2020, 13:53
            +1
            Основной конкурент ERP CRM решений — Excel :-). Надо посчитать площядь изделий. Давайте в Excel формулы набъем, а то на калькуляторе уже достало считать. Потом добавили стоимость металла, расчет трудозатрат и через 5 лет самописная ERP на Excel :-)
              Павел Гвоздь
              17 октября 2020, 10:50
              0
              Я когда увидел, как моя подруга работает в Excel, как во вспомогательном редакторе для построения огромного числа SQL запросов, то мягко говоря ох… л.
    Димыч
    17 октября 2020, 12:03
    0
    Не проще было в гугл-таблицы все перенести, а оттуда уже и тягать? Все же Экзель это анахронизм какой-то.
      Александр Туниеков
      17 октября 2020, 16:10
      +2
      Не не проще. Макросов кучу директор уже сделал и эксель директор знает а что-то другое учить у него времени нет. Да и эксель еще не анохронизм. Он еще MODX переживет :-)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      9