2012-10-05 4 views
1

Excel 통합 문서를 xlrd으로 열고, xlutils으로 복사하고 xlwt으로 업데이트 한 다음 다시 다른 파일에 씁니다.xlutils를 사용하여 XLS를 복사 할 때 명명 된 범위 유지

결과 통합 문서에 원본에있는 명명 된 범위가 모두 누락되었습니다. 복사를하기 전에 xlrd 개체에서 실제로 그들을 읽었 기 때문에 명명 된 범위가 원본에 존재한다는 사실을 100 % 확신하고 이에 대한 업데이트를 기반으로합니다.

xlutils.copy.copy을 사용하는 것이 자연스러운 결과라고 가정하면 xlwt은 동일한 통합 문서의 xlrd 버전에서 읽은 명명 된 범위를 다시 만들 수있는 방법이 있습니까? 문서 (적어도 내가 찾을 수있는 것)는 희소합니다. 여기

문제를 보여줍니다 파이썬 세션 : 지금은

>>> from xlrd import open_workbook 
>>> wb = open_workbook('sc_auction_template.xls', formatting_info=True) 
>>> print len(wb.name_obj_list) # see, there are named ranges 
9 
>>> from xlutils.copy import copy 
>>> wb2 = copy(wb) 
>>> wb2.save('test.xls') 
>>> wb = open_workbook('test.xls') 
>>> print len(wb.name_obj_list) # but now there are none! 
0 
+0

"formatting_info = True"란 무엇입니까? 첫 번째 열어 보았지만 두 번째 열지는 않았습니다 ... 왜? – Antoni4040

+0

스프레드 시트에서 셀 서식 정보를 읽으려면 xlrd해야합니다. 이 코드를 잘라서 실제 실행 코드에서 편집했기 때문에 거기에 있습니다. 스프레드 시트에서 스프레드 시트로 셀 형식을 옮기는데 문제가 있다는 것을 제외하고는 명명 된 범위 문제와 관련이 없다고 생각합니다. –

답변

0

, 대답은 , xlwt이 이름을 쓰기 지원하지 않습니다 불행히도이다. 어쩌면 언젠가는 어떨지 모르지만 나는 곧 그것을 기대하지 않는다.

.xls 파일에 프로그래밍 방식으로 이름을 쓰는 유일한 방법은 Excel 자체 (예 : pywin32 또는 pywinauto 또는 Visual Basic의 일부)를 실행할 수있는 응용 프로그램의 인스턴스를 자동화하는 것입니다. Excel을 사용할 수없는 경우 OpenOffice.org를 스크립팅하는 유사한 방법이 있다고 생각합니다.