2009-08-27 3 views
3

많은 파일에서 일부 사용자 지정 속성 값을 변경해야합니다. 나는 하나의 파일을 위해 그것을 할 방법 - 다음 코드의 예입니다MSWord 문서 저장이 자동으로 실패하는 이유는 무엇입니까?

import win32com.client 

MSWord = win32com.client.Dispatch("Word.Application") 
MSWord.Visible = False 

doc = MSWord.Documents.Open(file) 
doc.CustomDocumentProperties('Some Property').Value = 'Some New Value' 
doc.Save() 
doc.Close() 

MSWord.Quit() 

"Excel.Application"에 대한 동일한 코드 실행 (약간의 변화를 - 그냥 작동하도록) 나에게 우수한 결과를 제공합니다. 그러나 MSWord에 doc.Save() 또는 doc.SaveAs(same_file)을 사용하면 자동으로 실패합니다. 이유는 모르겠지만 변경 사항은 저장되지 않습니다.

이제 제 해결 방법은 다른 파일에 SaveAs을 사용하는 것입니다. 하지만 MSWord 파일에 대해 왜 이상한 동작이 나타나고 어떻게 수정 될 수 있는지 이해하고 싶습니다.

편집 : 시도/예외의 침묵 오류 원인으로 사람을 오도하지 않기 위해 코드를 변경했습니다. 당신이 파일 쓰기 액세스 권한이있는 경우 그러나, 내 코드 :)에 그 결함을 찾기위한 그들 모두 덕분에

+0

은 실제 코드입니까? – SilentGhost

+0

그래, 나는 모든 것을 올바르게 사용하고 있다고 생각한다. 내 컴퓨터에서 작동하지 않는 이유는 무엇인지 이해할 수 없기 때문에 내가 그것에 대해 묻는 것입니다. 누군가가 똑같은 문제를 겪었을 수도 ... –

+0

결과를 재현 할 수 있었지만 문제를 해결할 방법이 없습니다. 나는이 질문을 권하고있다 ... WTF? – tgray

답변

3

잘못된 방법으로 CustomDocumentProperties을 사용하고 있었고 다른 사람들이 지적했듯이 예외를 삼키기 때문에 그것을 볼 수 없었습니다.

또한 여기서는 문서에서 아무 것도 찾을 수 없습니다. 속성을 변경하는 동안 Saved 속성이 재설정되지 않았기 때문에 파일이 변경되지 않았습니다.

msoPropertyTypeBoolean = 0 
msoPropertyTypeDate = 1 
msoPropertyTypeFloat = 2 
msoPropertyTypeNumber = 3 
msoPropertyTypeString = 4 

import win32com.client 

MSWord = win32com.client.Dispatch("Word.Application") 
MSWord.Visible = False 

doc = MSWord.Documents.Open(file) 
csp = doc.CustomDocumentProperties 
csp.Add('Some Property', False, msoPropertyTypeString, 'Some New Value') 
doc.Saved = False 
doc.Save() 
doc.Close() 

MSWord.Quit() 

참고 :

이 올바른 코드 오류 처리가없고, 생산 품질을 확실히 아니지만, 당신은 당신의 기능을 구현하는 것이 충분합니다.
마지막으로, 속성 유형의 값을 추측하고 있습니다 (그리고 문자열 유형은 추측이 정확함). 그러나 다른 것들은 약간의 문제가있을 수 있습니다.

+0

정말 생산 품질이 아니었지만 제품을 전혀 사용하지 않을 것입니다. 단지 Share Point 사이트가 미쳐 버렸으므로 이제는 수백 개의 파일을 수정해야합니다. 아무도 그것을 수동으로하고 싶지 :) 정말로 잘못 저장된 속성을 수동으로 내 문제를 해결하는 데 도움이! 많은 감사! 나는 Excel이 Saved 플래그를 자동으로 재설정하기 때문에 혼란 스러웠다. –

0

(가) 확인

(b)는 당신이 코드 COMException를 사용하여 잡는다 확인

Darknight

여러 문서

를 만들 때 (C)를 사용하면 정상적으로 엑셀/워드를 종료하는

0

오류를 무시하기 때문에 자동으로 실패합니다 (except: pass).

Word 파일을 저장하는 것이 일반적으로 실패하는 가장 일반적인 이유는 Word에서 열려 있기 때문입니다.

1

Value을 성공적으로 변경 한 경우에만 파일을 저장하고 있습니다. try - except 절을 제거하고 파일이 저장되지 않을 때 실제로 어떤 일이 일어나는지 보려고 할 수도 있습니다. 그리고 btw, 베어 except을 사용하는 것은 좋은 습관이 아닙니다.

관련 문제