2012-05-19 3 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, и я прыгаю между окнами и linux.

Спасибо за вашу помощь, GM

+3

Как это связано с ArcGIS (или ГИС вообще)? Это похоже на проблему Python/Excel: это означает, что вы можете получить более быстрый (и более) совет, переносящий вопрос в SO. – whuber

+0

Полный вопрос: как составить таблицы всех полей класса функций и вывести их в один XLS с использованием python в качестве инструмента arcscript и с помощью автоматизированного скрипта python на ежедневной, еженедельной основе? До сих пор я получил этот вопрос. – 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». Сначала в порядке ввода находится файл2.xls. Код, который вы показали, перезаписывает предыдущий ввод и даст вам LAST-файл (в порядке ввода), а не первый ... возможно, вы ошибаетесь. Примечание. Последний входной файл «copy_test.xls», скорее всего, будет предыдущим файлом OUTPUT; возможно, ваш выходной файл должен быть помещен в отдельную папку.

+0

Перечислите! Спасибо, что помогли этому идиоту. Cshift не работал с циклом for, и использование перечисления делает все счастливым. Я вам обязан. – gm70560

Смежные вопросы