Проблема с вашим кодом заключается в способе вычисления и использования счетчика
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 строки
если файл не существует или был пуст
ваш цикл записывает 0 раз как rowCounter становится 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