2013-10-21 1 views
5

이것은 다소 복잡 할 수 있지만 pythonwin 또는 다른 모듈을 사용하여 MS Excel (또는 VBA를 사용하는 다른 MS Office 제품)에서 VBA를 만드는 데 파이썬 스크립트를 사용할 수 있습니다.Python을 사용하여 VBA 스크립트 작성

이 아이디어는 pythons openpyxl 모듈이 열 자동 폭을 수행 할 수 없다는 데서 비롯되었습니다. 내가 가진 스크립트는 메모리에 통합 문서를 만들고 결국 디스크에 저장합니다. 꽤 많은 시트가 있으며 각 시트에는 꽤 많은 컬럼이 있습니다. 나는 생각했다 .... 나는 단지 Python을 사용하여 VBA 스크립트 (메모장이나 어딘가에 저장되어있는)를 Excel의 VBA 편집기에 가져온 다음 pythonwin을 사용하여 Python에서 스크립트를 실행하면 어떨까요?

Workbooks.worksheets.Columns("A:Z").EntireColumn.Autofit 

당신이 언급하기 전에, 그래 내가 본 openpyxl의 열을 조절하는 자동 해결하는 방법에 파이썬 예제의 많은,하지만 난 기능을 활용했다 할 수있는 흥미로운 기회를 참조하십시오

뭔가 같은 당신은 VBA에서 얻을 수있는 파이썬에서 사용할 수 없습니다.

어쨌든 나는 인터넷을 조금 파고 내가 할 수있는 것을 보지 못했기 때문에 물어볼 것이라고 생각했다.

건배, 마이크

+0

예, Python을 사용하여 다른 언어, 대부분의 경우 _any_ 다른 언어로 프로그램을 작성할 수 있습니다. – martineau

+2

자동 적합 기능을 실행하기 위해 Excel을 실행하려면 자동화를 통해 모든 것을 만들면됩니다. 그렇다면 동적 코드 생성을 수행 할 필요가 없습니다 ... –

+0

이 질문에 약간의 먼지가 있더라도 도움이 될 수 있습니다. https://www.pyxll.com/docs/macros.html – AnyOneElse

답변

5

네, 가능합니다. that Microsoft KB에서 VB에서 VBA 매크로를 생성하는 방법을 살펴볼 수 있습니다.

아래의 파이썬 코드는 동일한 작업을 수행하는 방법을 보여줍니다. 그것은 KB 샘플 코드의 첫 번째 절반의 기본 포트입니다 :

import win32com.client as win32 

import comtypes, comtypes.client 

xl = win32.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
ss = xl.Workbooks.Add() 
sh = ss.ActiveSheet 

xlmodule = ss.VBProject.VBComponents.Add(1) # vbext_ct_StdModule 

sCode = '''sub VBAMacro() 
     msgbox "VBA Macro called" 
     end sub''' 

xlmodule.CodeModule.AddFromString(sCode) 

당신은 눈에 보이는 자동화 엑셀 매크로를 볼 수 있습니다, 당신은 위에서 정의 된 VBAMacro을 볼 수 있습니다.

+0

기회가 있습니다. 오늘 코드를 테스트하고 테스트 해보십시오. 기고에 감사드립니다. 이것은 올바른 방향으로 나를 움직입니다. 이 코드가 도움이 될 수있는 많은 아이디어가 있습니다. – Mike

+0

@ 내게 환영합니다. – Boud

+0

궁금합니다. 내 코드 전체에서 openpyxl을 사용하고 있으며이를 변경하고 싶지 않습니다. 나는 모든 코드를 실행하고 통합 문서를 만들고이를 디스크에 저장할 수 있다고 생각합니다. 내 코드의 끝에 통합 문서를 잡고 win32를 사용하여 코드를 실행하고 그 시점에서 하위 프로세스를 추가 할 수있는 방법이 있습니까? 위와 같이 EnsureDispatch를 사용하여 인스턴스를 여는 대신 win32를 사용하여 기존 엑셀 시트를 여는 데 어려움을 겪고 있습니다. – Mike

관련 문제