2016-09-27 9 views
0

Я пытался запланировать отчет в SAP BO CMC. Этот отчет был первоначально написан на Python и встроен в файл .exe. Это приложение .exe выполняется для сохранения отчета в файл .xlsx в локальной папке. Я хочу использовать удобные функции планирования в SAP BO CMC для отправки отчета в сообщениях электронной почты. Я попытался создать «локальную программу» в CMC и связал ее с файлом .exe, но вы можете легко представить себе проблему, с которой я сталкиваюсь - приложение ставит файл в папку как обычно, но CMC не сможет для захвата созданного файла Excel. Есть ли способ перезаписать программу Python немного, чтобы выход не был файлом в какой-либо папке, , но объектом, который CMC может получить в качестве прикрепления к электронным письмам? Я планировал отчеты Crystal в CMC, и это происходит естественно. Выход Кристалла можно отправить в виде вложения в электронную почту. Интересно, может ли подобное происходить для .exe и как? Пожалуйста, поделитесь своими мыслями. Большое спасибо!Как я могу положить файл Excel в виде вложения электронной почты в SAP CMC?

P.S. Не думайте, что можно переписать отчет в Crystal, хотя, поскольку данные нужно манипулировать на основе данных из разных источников данных. Вот здесь и помогает Python. И я надеюсь, что мне не нужно писать программу, чтобы покрывать материалы электронной почты и планировать ее в запланированных задачах Windows. Последний вариант ... Это было бы слишком неудобно для поддержания. Мы не получаем доступ к серверу легко.

ответ

1

Это своего рода хак-иш, но это можно сделать. Попросите программу (exe) записать байты файла Excel в стандартный вывод. Затем настройте объект программы для адресата электронной почты и задайте имя файла для определенного имени (например, «whatever.xlsx»).

При отправке электронной почты программному объекту вложенный файл будет содержать стандартный вывод/ошибку программы. Обычно это будет только текст, но он также работает и для двоичного вывода.

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

Я тестировал это с помощью программного объекта Java; но exe должен работать так же хорошо.

+0

Спасибо, Джо. Я предполагаю, что нужно использовать «print» в Python. Я попробовал «распечатать» и да, он отправил вывод в виде вложения. Единственный вопрос, который у меня есть, - прошу меня быть новичком в обработке Excel - что мне следует писать в строке для «печати», чтобы сделать его файлом Excel? Я напечатал текстовый файл ... – Ann

+0

'print()' преобразует объект, который вы передаете в строку, вызывая 'str()'. Вы хотите вывести байты в стандартный вывод, а не в обычную строку, а двоичную строку ('b'''). Используйте 'sys.stdout.buffer.write (b'abc ')' для записи двоичных данных в выходной поток (см. [Docs] (https://docs.python.org/3.5/library/sys.html# sys.stdout), особенно примечание). –