mend0za: (Default)
mend0za ([personal profile] mend0za) wrote2010-11-03 05:48 pm

Обращение к духам промышленной автоматизации

Как обычно - хочется страшного.

А именно - мне надо из Excel-таблицы генерить конфигурацию для моего кодогенератора (awk).
Конфигурация - в CSV-формате. Заказчик обоссал себе пятки и уже внёс в план.

Чо делать? Куда бежать? Кому сдаваться?

Update1, Use Case:
1. Есть Excel созданный лучшими умами современности, с данными о нашем формате и большой кнопкой "Сделать мне красиво".
2. Тупой лось малобюджетный junior-разработчик открывает xls-файл и нажимает большую красную кнопку.
3. Тупому лосю малобюджетному разработчику выдают диалог "Куда, сохранить сгенерированную конфигурацию, хозяин?"
4. Конфигурация сохранена и используется в компиляции.

Как мне представляется - тут чтото вроде VBA, но я областью не владею, потому спрашиваю.

Update2:Excel в роли GUI в котором рисуют конфигурацию на вход кодогенератора.

[identity profile] b0rmann.livejournal.com 2010-11-03 03:54 pm (UTC)(link)
Spreadsheet::ParseExcel (http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.58/lib/Spreadsheet/ParseExcel.pm)

[identity profile] yuripats.livejournal.com 2010-11-03 04:01 pm (UTC)(link)
А какие ограничения системы?
Просто XLS -> CSV конвертер или с дополнительными преобразованиями?

[identity profile] metaclass.livejournal.com 2010-11-03 04:23 pm (UTC)(link)
Любой парсер Excel, вплоть до самого Excel с внешними вызовами.
И ЖЭСТАЧАЙШЭ прописать в ТЗ формат входной таблицы, потому что иначе будет ад.

[identity profile] wildman.livejournal.com 2010-11-03 04:27 pm (UTC)(link)
python + xlrd
строчек 20 :)

[identity profile] bigfrogg.livejournal.com 2010-11-03 04:27 pm (UTC)(link)
xls2csv

[identity profile] mend0za.livejournal.com 2010-11-03 04:36 pm (UTC)(link)
см use case

[identity profile] mend0za.livejournal.com 2010-11-03 04:36 pm (UTC)(link)
см use-case

[identity profile] mend0za.livejournal.com 2010-11-03 04:37 pm (UTC)(link)
только combo-боксы и никакой самодеятельности

[identity profile] mend0za.livejournal.com 2010-11-03 04:39 pm (UTC)(link)
см update

[identity profile] mend0za.livejournal.com 2010-11-03 04:39 pm (UTC)(link)
см update

[identity profile] wildman.livejournal.com 2010-11-03 04:48 pm (UTC)(link)
жесть-жесть-жесть. делали такое. VBA.

http://paste.org.ru/?5d3iib
навешивается на кнопку.

принцип следующий:
1. нужный участок (по ячейкам или по именованной области копируется в клипбоард)
2. в файл добавляется sheet
3. в шит пейстится скопированный кусок
4. добавленный sheet сохраняется как csv

кста с комбобоксами могут быть нюансы.
Edited 2010-11-03 23:32 (UTC)

[identity profile] bigfrogg.livejournal.com 2010-11-03 04:51 pm (UTC)(link)
Excel сохраняет не важно что (по меню файл-сохранить как), то что он сохраняет скармливается скриптам. Скрипты делают своё дело.
Или я чего-то не понимаю.

[identity profile] g-rub.livejournal.com 2010-11-03 04:54 pm (UTC)(link)
Посмотрел апдейт. Сраный пиздец.

"Excel в роли GUI" -- очевиднейшим образом воплощает собой "дешёвое и упрощенное решение" для воплощения местными эникейщиками.

Поэтому вопрос только один -- схуя эта задача приехала к тебе в руки, да еще в неизменном виде?

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

Вариант, когда это делаешь ты -- максимальный по геморрою для всех заинтересованных сторон.

[identity profile] mend0za.livejournal.com 2010-11-03 04:56 pm (UTC)(link)
Нет, не понимаешь.

Из Excel генерируется файл произвольного формата, основанный на данных в xls. Это может быть CSV, это может быть .C или .H.

[identity profile] g-rub.livejournal.com 2010-11-03 04:56 pm (UTC)(link)
Стопудово понадобится еще средствами экселя воплощать дикий кусок логики, проверяющей консистентность того, что наваяно и пригодность его к экспортированию в конфигурацию.

[identity profile] mend0za.livejournal.com 2010-11-03 04:59 pm (UTC)(link)
Нет, я это не делаю. Хотя и я это предложил. Я как бы архитектор всего счастья и автор концепции.

Исходная схема, воплощённая предыдущей имплементацией на ThreadX представляла собой концепцию "мы размазали знания о данных по всему коду хуй знает где и после выхода на пенсию автора мы не знаем что с этой хуйнёй дальше делать".

Текущая концепция - "мы посадили дешёвого идиота за Excel и пусть он рисует конфигурации для железа, пока дорогие идиоты делают более сложные задачи".

Как менеджер - ты не смотришь сейчас на техническую сторону. А именно она меня интересует в настоящий момент.

[identity profile] mend0za.livejournal.com 2010-11-03 05:00 pm (UTC)(link)
К счастью - большинство полей имеет конечный список значений. Слишком много бреда не сделают.

[identity profile] mend0za.livejournal.com 2010-11-03 05:03 pm (UTC)(link)
И из радостного. У дорогого заказчика на другом офисе и другом проекте из Excel GUI генерят Си (.c и .h).
К счастью у нас - кодогенератор есть и останется на AWK.

[identity profile] g-rub.livejournal.com 2010-11-03 05:10 pm (UTC)(link)
Я не менеджер, окстись.

С технической точки зрения мне кажется, что проще вылепить лёгкий ГУИ, дающий на выходе ровно вашу спеку. А нужность Ёкселя не просматривается никак.

[identity profile] mend0za.livejournal.com 2010-11-03 05:17 pm (UTC)(link)
да, я уже сам к тому склоняюсь, собственному гую.

Но остаётся вопрос как описывать имеющиеся внутренние взаимосвязи. В Excel для этого есть развитой понятийный аппарат. На своём велосипеде придётся всё делать самостоятельно.

[identity profile] g-rub.livejournal.com 2010-11-03 05:32 pm (UTC)(link)
Эм, ну неужели средств питона/руби не хватит описать любые взаимосвязи? (это, естественно, в предположении, что логика не прибита гвоздями к гую).

Просто мне что-то подсказывает что с питоном-руби вам на порядок проще будет это сделать, чем с незнакомыми недрами Ёкселя.

[identity profile] vp.livejournal.com 2010-11-03 06:10 pm (UTC)(link)
Я бы по возможности в экселе генерил бы конфигурацию, но не так.
Создаешь НУЖНУЮ ТЕБЕ заготовку csv (!!) файла
Они ее открывают хоть экселем, хоть чем угодно.
Сохраняют в csv (ниакого xls!!)
Далее помянутыми выше консольными тулзами спокойно и проверяется на формат, и преобразуется.
Все.

[identity profile] wildman.livejournal.com 2010-11-03 11:42 pm (UTC)(link)
сильно часто прийдётся ругаться на криворукость заполняющих. где то запятая в дробном числе вместо точки. где то в цифире пробел (ну блин по три разряда надо же чем то отбивать) и т.д.

опробованная методика - генерится шаблон в excel
первый шит - то куда вносятся данные
2-й, 3-й надцатый шиты - перечни значений для полей ввода параметров. в именованных областях.
всё шиты кроме первого - закрыты от правки
в первом открыты для произвольного заполнения только единичные поля/колонки. остальное - комбобоксы. везде ограничения по допустимым значениям - комбобоксы с выбором из named областей из закрытых шитов.

всё. испортить шаблон среднестатистическая секретутка или представитель интеллектуального большинства неспособны. втягивать данные - лёхко. современные парсеры способны различать named области. можно и значения на id мапить прямо там при желании/отсутствии параноидальных замашек.