2016-09-27 10 views
0

SAP BO CMC에서 보고서를 예약하려고했습니다. 이 보고서는 처음에는 Python으로 작성되었으며 .exe 파일로 작성되었습니다. 이 .exe 응용 프로그램은 보고서를 로컬 폴더의 .xlsx 파일에 저장합니다. SAP BO CMC의 편리한 일정 기능을 사용하여 전자 메일로 보고서를 보내고 싶습니다. CMC에서 "로컬 프로그램"을 만들었으며이를 .exe 파일에 연결했지만 직면 한 문제를 쉽게 상상할 수 있습니다. 응용 프로그램에서 파일을 폴더에 넣지 만 CMC에서 파일을 가져올 수 없습니다. 생성 된 엑셀 파일을 잡아. 출력이 일부 폴더에있는 파일이 아니고 이지만 CMC가 전자 메일의 첨부 파일로 가져올 수있는 객체가되도록 Python 프로그램을 다시 작성하는 방법이 있습니까? 저는 CMC에서 Crystal 보고서를 예약했으며 이는 자연스럽게 발생합니다. Crystal 출력을 전자 메일의 첨부 파일로 보낼 수 있습니다. .exe에 대해 비슷한 일이 발생할 수 있고 궁금한 점이 있습니까? 친절하게 생각해보십시오. 고마워요!SAP CMC에서 Excel 파일을 전자 메일 첨부 파일로 저장하려면 어떻게합니까?

P. 다른 데이터 소스의 입력을 기반으로 데이터를 조작해야하므로 Crystal에서 보고서를 다시 작성할 수 있다고 생각하지 마십시오. 그것이 파이썬이 도움이되는 곳입니다. 그리고 나는 전자 우편 물건을 커버하고 Windows의 예정된 작업에서 일정을 계획하는 프로그램을 작성할 필요가 없기를 바랍니다. 마지막 옵션 ... 이것은 유지하기에는 너무 불편할 것입니다. 우리는 서버에 쉽게 접근하지 못합니다.

답변

1

일종의 해킹 틱이지만 할 수 있습니다. 프로그램 (exe)이 표준 출력에 Excel 파일의 바이트를 기록하도록하십시오. 그런 다음 전자 메일 대상에 대한 프로그램 개체를 구성하고 특정 이름 (예 : "what.xlsx")으로 파일 이름을 설정하십시오.

프로그램 개체를 전자 메일로 보낼 때 첨부 파일에는 프로그램의 표준 출력/오류가 포함됩니다. 일반적으로 텍스트 일 ​​뿐이며 바이너리 출력에서도 작동합니다.

해킹이므로 프로그램이 표준 출력에 다른 텍스트 (예 : 오류 메시지)를 생성하면 .xlsx 파일에 포함되어 파일이 유효하지 않게됩니다. 나는 프로그램 오류를 관리하여 파일에 기록하고 표준 출력/오류에 기록하지 않도록 제안합니다.

나는 이것을 Java 프로그램 개체로 테스트했습니다. 하지만 exe는 잘 작동합니다.

+0

조 감사합니다. 나는 그것이 파이썬에서 "print"를 사용하는 것이라고 생각한다. 나는 "print"를 시도했고, 그것이 출력물을 첨부 파일로 보냈다. 내가 가진 유일한 질문은 - 엑셀 처리에 관한 초보자 인 것을 용서해주십시오 - "인쇄"가 Excel 파일이되도록 문자열에 무엇을 써야합니까? 내가 인쇄 한 것은 텍스트 파일을 만들었습니다 ... – Ann

+0

'print()'는'str()'을 호출하여 전달할 객체를 문자열로 변환합니다. 바이트를 표준 출력으로 출력하기를 원할 것입니다. 따라서 일반 문자열이 아닌 바이너리 문자열 ('b''')을 출력하십시오. 바이너리 데이터를 출력 스트림에 쓰려면'sys.stdout.buffer.write (b'abc ')'를 사용하십시오 (cf. [docs] (https://docs.python.org/3.5/library/sys.html# sys.stdout), 특히 주). –