我正在尝试将Excel工作表(csv文件)复制/粘贴到另一个主Excel工作表中。该主表已经包含数据,我想将数据附加到它。
但是,该代码运行时没有错误消息,并且不会将任何数据附加到主表中。
以下代码:
#from openpyxl import Workbook
from openpyxl import load_workbook
#file to be copied
wb1 = load_workbook('inputDataTable.xlsx')
ws1 = wb1.get_sheet_by_name('testthis')
#file to be pasted into
wb2 = load_workbook('test.xlsx')
ws2 = wb2.get_sheet_by_name('testthis')
def copyRows():
#range counter for rows/cols
rowCounter = 0
for row in ws1.iter_rows():
colCounter = 0
for col in ws1.iter_cols():
colCounter += 1
rowCounter += 1
#copy part
rowList = [] #list of lists of rows
for i in range(1, rowCounter+1):
rowSelected = [] #list of rows
for j in range(1, colCounter+1):
rowSelected.append(ws1.cell(row=i, column=j).value) #cell values are added to the list of rows
rowList.append(rowSelected)
print(rowList)
return rowList
def pasteRows(copiedData):
#range counter for rows/cols
rowCounter = 0
for row in ws2.iter_rows():
colCounter = 0
for col in ws2.iter_cols():
colCounter += 1
rowCounter += 1
#paste part
countRow = 0
for i in range(1, rowCounter+1):
countCol = 0
for j in range(1, colCounter+1):
ws2.cell(row=i, column=j).value = copiedData[countRow][countCol]
countCol += 1
countRow += 1
wb2.save('test.xlsx')
pasteRows(copyRows())
就像this,但没有硬编码范围。
答案 0 :(得分:0)
代码的问题是计算和使用计数器的方式
rowCounter只是表示Excel文件中的行 假设您有两个文件 inp.xlsx 3行 out.xlsx 2行
first you calculate __rowCounter__ as 3 in copyrows()
then you calculate again __rowCounter__ in pasterows()
for file __out.xlsx__ and it becomes 2
所以您只想写2行
如果文件不存在或为空 当 rowCounter 变为0
时,循环将写入0次尝试此操作
wb = load_workbook(path, use_iterators=True)
sheet = wb.get_sheet_by_name(sheet_name)
rowCounter = sheet.max_row
colCounter = sheet.max_column
这是你的答案
from openpyxl import load_workbook
wb1 = load_workbook('input.xlsx')
ws1 = wb1.get_sheet_by_name('Sheet1')
row_counter = ws1.max_row
col_counter = ws1.max_column
#file to be pasted into
wb2 = load_workbook('output.xlsx')
ws2 = wb2.get_sheet_by_name('Sheet1')
def copyRows():
# we use global variable row_counter and col_counter directly into pasteRows()
#copy part
rowList = [] #list of lists of rows
for i in range(1, row_counter+1):
rowSelected = [] #list of rows
for j in range(1, col_counter+1):
rowSelected.append(ws1.cell(row=i, column=j).value) #cell values are added to the list of rows
rowList.append(rowSelected)
print(rowList)
return rowList
def pasteRows(data):
#paste part
countRow = ws2.max_row # in case ws2 contains rows already
for Row in range(row_counter):
for Col in range(col_counter):
ws2.cell(row= Row+countRow + 1, column=Col+1).value = data[Row][Col]
wb2.save('test.xlsx')
pasteRows(copyRows())
## the following is the content of each xlsx files
##
## input.xlsx
## Name Class Marks
## Roushan 7 90
## James 8 78
## Johny 9 95
##
## output.xlsx
## we are here
##
## test.xlsx empty
##
## both input.xlsx and output.xlsx have cells in Sheet1