2014-12-30 4 views
-1

열려있는 Microsoft Excel 통합 문서가 있고 탭을 순환하여 원본 통합 문서의 각 탭에 대한 통합 문서를 만들고 저장합니다. 그래서 나는 파일 A를 열어 탭 1, 2, 3이 있고 파일 B, C, D를 만들고 고유 한 탭 하나를 가지고 저장합니다. 워크 시트의 단일 복사본을 만드는 VBA 코드가 있지만 파이썬에서이 작업을 시도 할 때 각 통합 문서의 모든 탭이 끝납니다. 다음Python - Win32com - 통합 문서 열기 및 각 탭에 대해 새 Excel 파일 만들기


Sub ConvertTabsToFiles() 
    Dim currPath As String 
    currPath = Application.ActiveWorkbook.Path 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
For Each xWs In ThisWorkbook.Sheets 
    xWs.Copy 
    Application.ActiveWorkbook.SaveAs Filename:=currPath & "\" & xWs.Name & ".xlsx" 
    Application.ActiveWorkbook.Close False 
Next 
    Application.DisplayAlerts = True 
    Application.ScreenUpdating = True 
End Sub 

파이썬 코드입니다 작동하지 않습니다 :


xlApp = win32.com.client.Dispatch("Excel.Application") 
xlwb = xlApp.Workbooks.Open("C:\Inputfile.xlsx") 

for sheet in xlwb.Worksheets: 
    sheet.Copy 
    xlApp.ActiveWorkbook.SaveAs("C:\Users\user\AppData\Local\Temp\\"+ sheet.Name+".xlsx") 

가 당신의 도움이 정말 감사합니다 다음은 작동하는 VBA입니다 나는 곤란하다. 미리 감사드립니다.

+1

'sheet.Copy'는 이름 일 뿐이며, 속성이 아닌 한 호출되지 않고는 아무 것도하지 않습니다. – TankorSmash

+0

감사. 이름을 사용할 수없는 경우 저장하려는 정확한 워크 시트를 어떻게 지정합니까? 감사합니다 – user2320821

+1

각 '시트'에 대해 새 통합 문서를 만들어야합니다. 이렇게하기 위해'win32com'을 사용한 적이 한번도 없었습니다. 저는 항상 http://www.python-excel.org/를 사용했습니다. 아이디어는 동일하지만 새로운 통합 문서를 열고, 시트를 저장하고, 책을 닫고, 다른 시트를 저장합니다. – TankorSmash

답변

2

감사합니다. Schollii에게 감사드립니다. 올바른 방향으로 나아갈 수있었습니다. 다음은 나를 위해 일한 것입니다, 나는 당신을 도움이되기를 바랍니다 :

for sheet in xlwb.Worksheets: 
    xlApp = win32com.client.Dispatch("Excel.Application") 
    nwb = xlApp.WorkbookAdd() 
    sheet.Copy(Before=nwb.Sheet(1)) 
    nwb.SaveAs("C:\Users\user\AppData\Local\Temp\\" +sheet.Name+ ".xlsx") 
    nwb.Close(True) 

당신에게 모두 감사드립니다. 특히 나를 올바른 길로 인도 해준 Schollii. 또한 답변을 주셔서 감사합니다 TankorSmash.

+1

굉장한. 자신의 게시물의 가치에 대해 사람들에게 감사하는 방법은 자신의 게시물을 업보트하는 것임을 잊지 마십시오. – Schollii

3

당신은 다른 이름으로 저장 방법을 통해 개별 시트를 저장할 수 있습니다 : 문자열을 모호하게하는 두 배로 않는 한 내가 그렇지 않으면 백 슬래시는 특수 문자 파이썬에 의해 해석 얻을 문자열에 'R'접두사를 넣어

for sheet in xlwb.Worksheets: 
    filename = r"C:\Users\user\AppData\Local\Temp\" + sheet.Name + ".xlsx" 
    sheet.SaveAs(filename) 
    print('Saved sheet to', filename) 

참고.

+0

Schollii는 내가 시도한 것과 정확히 일치합니다. 나는 코드를 시도했지만 원본의 개별 탭/스프레드 시트가 아닌 전체 통합 문서의 복사본을 저장합니다. – user2320821

+1

사실,이 버그 또는 잘못 문서화 된 함수 것 및 불행히도 로컬로 시도 할 수 없습니다. 예를 들어 http://stackoverflow.com/questions/19940409/use-vba-macro-to-save-each-excel-worksheet-as-separate-workbook에 대한 두 번째 답변을 참조하십시오. 그것이 완전하게 정확하지 않았지만 기쁜 나의 지위는 도움이었다 :) – Schollii