2012-05-19 2 views
0

xlwt.Workbook()에서 워크 시트의 열 수를 반환하는 방법을 찾지 못하는 것 같습니다. 이 아이디어는 디렉토리에서 .xls 파일의 뭉치를 하나의 파일로 결합하는 것입니다. 한 가지 문제는 다음 파일을 작성할 때 열 위치를 변경하는 것입니다. 이것은 내가 지금까지 함께 일하고 있어요 무엇 :xlwt 워크 시트의 열 수

import xlwt, xlrd, os 

def cbc(rd_sheet, wt_sheet, rlo=0, rhi=None, 
rshift=0, clo=0, chi=None, cshift = 0): 
    if rhi is None: rhi = rd_sheet.nrows 
    if chi is None: chi = 2#only first two cols needed 
    for row_index in xrange(rlo, rhi): 
     for col_index in xrange(clo, chi): 
      cell = rd_sheet.cell(row_index, col_index) 
      wt_sheet.write(row_index + rshift, col_index + cshift, cell.value) 

Dir = '/home/gerg/Desktop/ex_files' 
ext = '.xls' 
list_xls = [file for file in os.listdir(Dir) if file.endswith(ext)] 
files = [Dir + '/%s' % n for n in list_xls] 
output = '/home/gerg/Desktop/ex_files/copy_test.xls' 
wbook = xlwt.Workbook() 
wsheet = wbook.add_sheet('Summary', cell_overwrite_ok=True)#overwrite just for the repeated testing 

for XLS in files: 
    rbook = xlrd.open_workbook(XLS) 
    rsheet = rbook.sheet_by_index(0) 
    cbc(rsheet, wsheet, cshift = 0) 

wbook.save(output) 

list_xls 반환 :

['file2.xls', 'file3.xls', 'file1.xls', 'copy_test.xls'] 

파일을 반환 :

['/home/gerg/Desktop/ex_files/file2.xls', '/home/gerg/Desktop/ex_files/file3.xls', '/home/gerg/Desktop/ex_files/file1.xls', '/home/gerg/Desktop/ex_files/copy_test.xls'] 

내 질문 xlwt에 기록 된 각 파일을 닫게하는 방법입니다. 매번 2 번씩 통합 문서. 이 코드는 내게 .../copy_test.xls에 저장된 첫 번째 파일을 제공합니다. 파일 목록에도 문제가 있습니까? 나는 있을지도 모른다는 느낌이 들었다. 이것은 Python2.6이며 Windows와 Linux간에 바운스됩니다.

당신은 각 입력 스프레드 시트의 첫 번째 두 개의 열을 사용하고, 당신의 도움을 GM

+3

이것은 어떻게 ArcGIS (또는 GIS)와 관련이 있습니까? 그것은 파이썬/엑셀 문제처럼 보입니다 : 이것은 당신이 질문을 SO로 옮기는 더 빠르고 (그리고 더 많은) 조언을 얻을 수 있음을 의미합니다. – whuber

+0

전체 질문 : 피처 클래스의 모든 필드에 대한 테이블 요약을 만들고 파이썬을 arcscript 도구로 사용하고 일별, 주별로 자동 파이썬 스크립트를 사용하여 단일 XLS로 출력하는 방법은 무엇입니까? 나는이 질문으로 지금까지 얻었습니다. – gm70560

답변

1

을 주셔서 감사합니다. "xlwt.Workbook()"에서 워크 시트의 열 수는 필요 없습니다. 코드에 이미 cshift 메커니즘이 있지만 사용하고 있지 않습니다. 일반성에 대한

for file_index, file_name in enumerate(files): 
    rbook = xlrd.open_workbook(file_name) 
    rsheet = rbook.sheet_by_index(0) 
    cbc(rsheet, wsheet, chi = 2, cshift = file_index * 2) 

변경 라인
if chi is None: chi = 2
를 함수에
if chi is None: chi = rsheet.ncols
에와로 chi=2을 통과 : 당신이해야 할 일은 다음과 같이 당신의 외부 블록에서 루프를 변경할 수 있습니다 arg 위 코드에서했던 것처럼.

덮어 쓰기 확인을 무시하는 이유를 모르겠다. 애플리케이션에서 반드시 기존 셀 값을 덮어 쓰면 올바르지 않습니까?

"이 코드는 .../copy_test.xls에 저장된 첫 번째 파일을 제공합니다"라고 말합니다. 첫 번째 입력 순서는 file2.xls입니다. 표시 한 코드는 이전 입력을 덮어 쓰고 마지막 파일 (입력 순서대로)을 제공합니다. 첫 번째 파일은 아닙니다. 아마도 실수를 한 것입니다. 참고 : 마지막 입력 파일 'copy_test.xls'는 이전 OUTPUT 파일 일 가능성이 큽니다. 출력 파일은 별도의 폴더에 저장해야합니다.

+0

열거하십시오! 이 바보를 도와 주셔서 감사합니다. cshift는 for 루프와 함께 작동하지 않았으며 enumerate를 사용하면 일이 행복해졌습니다. 나는 너에게 빚진 빚이있다. – gm70560

관련 문제