通过 python 复制 excel 行
Copying excel rows via python
我基本上有一个 excel 文件,在特定 sheet
中包含以下条目
row[0][0]=hello
row[1][0]=bye
row[2][0]=hi
我想将这三行复制到原始sheet中存在的行数,以便修改后的sheet具有以下内容。
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")
但是,我得到以下输出
row[0][0]=hello
row[1][0]=bye
row[2][0]=hi
row[3][0]=hello
row[4][0]=hello
row[5][0]=hello
row[6][0]=hello
不确定为什么会这样。
问题是,即使您在循环内更改循环变量 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")
我基本上有一个 excel 文件,在特定 sheet
中包含以下条目row[0][0]=hello
row[1][0]=bye
row[2][0]=hi
我想将这三行复制到原始sheet中存在的行数,以便修改后的sheet具有以下内容。
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")
但是,我得到以下输出
row[0][0]=hello
row[1][0]=bye
row[2][0]=hi
row[3][0]=hello
row[4][0]=hello
row[5][0]=hello
row[6][0]=hello
不确定为什么会这样。
问题是,即使您在循环内更改循环变量 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")