Копирование данных из рабочей книги Excel в другую рабочую книгу, необходимо выбрать определенные строки и столбцы - PullRequest
1 голос
/ 24 июня 2019

Мне удалось открыть книгу и сохранить ее, но я не могу скопировать и вставить определенные строки и столбцы. Я хотел бы иметь возможность использовать это для нескольких листов и добавлять данные к данным по мере роста строк.

Конечный продукт Я хотел бы выбрать несколько файлов Excel и скопировать определенные строки и столбцы, а затем добавить каждый в одну книгу Excel. Поскольку теперь мне нужно просмотреть 20 рабочих книг, скопировать и вставить их в одну рабочую книгу.

Я пробовал несколько разных методов и искал на форумах. Я могу только копировать и вставлять листы.

import openpyxl

#Prepare the spreadsheets to copy from and paste too.

#File to load
wb = openpyxl.load_workbook("Test_Book.xlsx")
# Get a sheet by name 
sheet = wb['Sheet1']

#File to be pasted into
template = openpyxl.load_workbook("Copy of Test_Book.xlsx") #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
    #A 8 to BC 27
    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)
    pasteRange(1,2,4,14,temp_sheet,selectedRange)
    template.save("Copy of Test_Book.xlsx")
    print("Range copied and pasted!")

1 Ответ

0 голосов
/ 26 июня 2019

Вы можете указать, какую строку или столбец вы хотите зациклить в объекте рабочего листа.

import openpyxl

wb = openpyxl.load_workbook("your_excel_file")
ws = wb.active

some_column = [cell.value for cell in ws["A"]] # Change A to whichever column you want
some_row = [cell.value for cell in ws["1"]] # Change 1 to whichever row you want

Затем вы можете добавить весь столбец / строку к новому рабочему листу.

...