熊猫,将单元格从工作簿复制到另一个

时间:2020-06-08 16:08:30

标签: pandas

我在从excel工作簿复制单元格并将其作为值粘贴到另一个工作簿时遇到问题。 我在第rowSelected.append(sheet.cell(row = i, column = j).value)行收到一条错误消息,消息为AttributeError: 'str' object has no attribute 'cell'

任何人都可以帮忙吗?

import openpyxl

#Prepare the spreadsheets to copy from and paste too.

#File to be copied
wb = openpyxl.load_workbook(r"") #Add file name
sheet = wb["BusinessDetails"] #Add Sheet name

#File to be pasted into
template = openpyxl.load_workbook(r"") #Add file name
temp_sheet = template["Sheet1"] #Add Sheet name

#Copy range of cells as a nested list
#Takes: start cell, end cell, and sheet you want to copy from.
def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []
    #Loops through selected Rows
    for i in range(startRow,endRow + 1,1):
        #Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol,endCol+1,1):
            rowSelected.append(sheet.cell(row = i, column = j).value)
        #Adds the RowSelected List and nests inside the rangeSelected
        rangeSelected.append(rowSelected)

    return rangeSelected


#Paste range
#Paste data from copyRange into template sheet
def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving,copiedData):
    countRow = 0
    for i in range(startRow,endRow+1,1):
        countCol = 0
        for j in range(startCol,endCol+1,1):

            sheetReceiving.cell(row = i, column = j).value = copiedData[countRow][countCol]
            countCol += 1
        countRow += 1
def createData():
    print("Processing...")
    selectedRange = copyRange(1,2,4,14,sheet) #Change the 4 number values
    pastingRange = pasteRange(1,3,4,15,temp_sheet,selectedRange) #Change the 4 number values
    #You can save the template as another file to create a new file here too.s
    template.save(r"")
    print("Range copied and pasted!")



copyRange(2,4,30,78,"BusinessDetails")
pasteRange(2,4,30,78,"Sheet1")

1 个答案:

答案 0 :(得分:2)

它必须是:

copyRange(2,4,30,78,sheet)
pasteRange(2,4,30,78,temp_sheet)

即您需要将工作表对象而不是工作表名称传递给函数。

根据评论更新:

rangeSelected = copyRange(2,4,30,78,sheet)
pasteRange(2,4,30,78,temp_sheet, rangeSelected)