xlwt工作表中的列数

时间:2012-05-19 17:10:06

标签: python excel xlwt

我似乎无法找到一种方法来返回xlwt.Workbook()中工作表中列数的值。我们的想法是在目录中获取一大堆.xls文件并将它们合并为一个。我遇到的一个问题是在编写下一个文件时更改列位置。这就是我到目前为止所做的工作:

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.workbook的文件扫描2次。此代码为我提供了保存到.../copy_test.xls的第一个文件。文件列表也有问题吗?我有一种感觉可能会有。 这是Python2.6,我在windows和linux之间反弹。

感谢您的帮助, GM

1 个答案:

答案 0 :(得分: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。您显示的代码是覆盖以前的输入,并将为您提供LAST文件(按输入顺序),而不是第一个...也许您错了。注意:最后一个输入文件'copy_test.xls'很可能是以前的OUTPUT文件;也许你的输出文件应放在一个单独的文件夹中。