通过python复制excel行

时间:2015-07-01 07:39:11

标签: python excel xlrd xlwt

我基本上有一个excel文件,在特定工作表中有以下条目

WHERE _conditions_

我想将这三行复制到原始工作表中的行数,以便修改后的工作表具有以下内容。

row[0][0]=hello

row[1][0]=bye

row[2][0]=hi

我的代码如下。

row[0][0]=hello

row[1][0]=bye

row[2][0]=hi

row[3][0]=hello

row[4][0]=bye

row[5][0]=hi

row[6][0]=hello

row[7][0]=bye

row[8][0]=hi

但是,我得到以下输出

from xlutils.copy import copy
from xlrd import open_workbook
import xlwt

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx")
book1=copy(book)
sheet=book.sheet_by_name('Sheet1')
sheet1=book1.get_sheet(0)
totalrows=sheet.nrows
print totalrows
for j in range(0,totalrows):
    for i in range(0,totalrows):
        row=sheet.cell_value(i,0)
        sheet1.write(j+totalrows,0,row)
        i+=1
    j+=totalrows
book1.save("/Users/tusharbakaya/Desktop/test1.xls") 

不确定为什么会这样。

1 个答案:

答案 0 :(得分:0)

问题在于,即使您在循环中更改循环变量j,该更改也会被range()函数中的下一个值覆盖。

举例说明 -

>>> for i in range(10):
...     print(i)
...     i = 1000
...
0
1
2
3
4
5
6
7
8
9

但是你的代码依赖于这种情况,你应该尝试设置为i + j * totalrows(每次)并从1开始j。内循环中的逻辑也有点不对,你应该依赖i变量来设置新工作簿中的值。

所以代码会变成 -

from xlutils.copy import copy
from xlrd import open_workbook
import xlwt

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx")
book1=copy(book)
sheet=book.sheet_by_name('Sheet1')
sheet1=book1.get_sheet(0)
totalrows=sheet.nrows
print totalrows
for j in range(0,totalrows):
    for i in range(0,totalrows):
        row=sheet.cell_value(i,0)
        sheet1.write(i+(j*totalrows),0,row)
book1.save("/Users/tusharbakaya/Desktop/test1.xls") 

或者您可以使用while循环代替for循环和

while循环的示例 -

from xlutils.copy import copy
from xlrd import open_workbook
import xlwt

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx")
book1=copy(book)
sheet=book.sheet_by_name('Sheet1')
sheet1=book1.get_sheet(0)
totalrows=sheet.nrows
print totalrows
j,k = 0, 0
while k < totalrows
    for i in range(0,totalrows):
        row=sheet.cell_value(i,0)
        sheet1.write(i+j,0,row)
    j+=totalrows
    k += 1
book1.save("/Users/tusharbakaya/Desktop/test1.xls")