Решаем задачи управления проектом в MS Project с помощью Python

У нас на проекте возникла задача - надо в MS Project объединить две задачи в одну, сохранив всех предшественников и последователей.

Как вы наверное знаете, сам MS Project такие задачи решать не умеет. И тут нам пригодился язык программирования Python, который в последнее время очень активно набирает обороты и в вэб-разработке, и в работе с big data.

Смотрите сами, как элегантно и быстро решилась эта задача.

Как мы видим на скриншоте, предшественники и последователи в MS Project могут быть отредактированы в текстовом виде - перечне идентификаторов задач, разделенных через точку с запятой.
Чтобы свести две задачи в одну, мы должны создать новую задачу, у которой указать в виде строки перечень уникальных предшественников и последователей, собранных из двух исходных задач.
Если таких последователей и предшественников немного, то можно это проделать и вручную. Но в данном случае мы имеем дело с большим планом проекта, и без автоматизации здесь никак не обойтись.

Открываем любой IDE Python, я использовал Spyder, входящий в пакет Anaconda, и начинаем редактировать текст программы в новом пустом модуле.
Набираем две строчки:

sa="339;291;253;254;255;256;257;258;259;260;261;262;263;264;265"
sb="339;306;307;308;309;310;311;312;313;314;315;316;317;318;319;320;321;267;268;269;270;273;274;275;276;277;278;279;280;281;282;283;284;285;286;287;288;322;323;324;325;326;327;271;272"

В значения переменных я скопировал текст последователей двух задач из MS Project (см. скриншот выше).
Теперь нам нужно получить из этих строк списки кодов задач.
В Python это делается очень и очень быстро.
Набираем следующие две строки кода:

la = sa.split(";")
lb = sb.split(";")

Просто и понятно, не правда ли?

Теперь, нам надо из двух списков получить один с уникальными значениями.
Язык программирования Python как будто знает, что нам нужно объединить два списка, и делает это максимально элегантно.
Набираем одну строку кода:

uni = set(la).union(lb)

В получившемся сете находятся уникальные значения кодов задач из двух списков.
Как же теперь нам из него получить строку, разделенную точкой с запятой?
Вы не поверите, но и эта задача решается быстро:

print ";".join(uni)

Итого, набрав 6 строчек кода мы решили нашу задачу.
Нажимаем на кнопку исполнения и справа в консоли получаем итоговый результат, который и вставляем в MS Project:



Обратите внимание, ту же самую программу можно было написать вообще в одну строчку кода:

print ";".join(set("339;291;253;254;255;256;257;258;259;260;261;262;263;264;265".split(";")).union("339;306;307;308;309;310;311;312;313;314;315;316;317;318;319;320;321;267;268;269;270;273;274;275;276;277;278;279;280;281;282;283;284;285;286;287;288;322;323;324;325;326;327;271;272".split(";")))


Популярные сообщения из этого блога

Показатели эффективности персонала в сфере услуг

Д. Кейрси. ТЕМПЕРАМЕНТ И ХАРАКТЕР

P2M: ЦЕННОСТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К УПРАВЛЕНИЮ ИННОВАЦИОННЫМИ ПРОГРАММАМИ И ПРОЕКТАМИ