Как скопировать и вставить данные из Excel в другой Excel, используя python - PullRequest
0 голосов
/ 16 марта 2020

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

Мне нужно копировать ТОЛЬКО определенные строки и столбцы, такие как первые 5 строк на 4 столбца (эти данные покрыты, строки с 1-го по 5-й, столбец: От A до D) из исходного файла и вставьте по фиксированной согласованности целевого файла Excel, например, строки: с 3-го по 7-й, столбец: от A до D. Следующая итерация. Я хотел бы скопировать следующие 5 строк на 4 столбца (эти данные описаны, строка: С 6-го по 10-й, столбец: от A до D) к той же координации (строка: с 3-го по 7-й, столбец: от A до D) и продолжайте копирование из исходного файла до конца sh копируйте все данные из исходного файла.

Ниже приведены вложения исходного файла и желаемого конечного файла.

source excel file на рисунке выше показаны данные из исходного файла

desired destination excel file выше На рисунке показаны данные из файла назначения.

Вот код, который я пробовал, но он возвращает странный вывод:

        # source          
        filename ="C:/Users/aaa/Desktop/combine_all.xlsx"
        wb1 = xl.load_workbook(filename) 
        ws1 = wb1.worksheets[0]                         
        # destination
        filename1 ="C:/Users/aaa/Desktop/algorithm.xlsx"
        wb2 = xl.load_workbook(filename1) 
        ws2 = wb2.active                           
        mr = ws1.max_row 
        mc = ws1.max_column  
        try:                     
            m = [1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96, 101, 106, 111, 116, 121, 126, 131, 136]
            n = [6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96, 101, 106, 111, 116, 121, 126, 131, 136, 141]
            for q in range (3, 8):
                for xm, yn in zip(m, n):                             
                    for i in range (xm, yn): 
                        for j in range (1, 5): 
                            c = ws1.cell(row = i, column = j)                                    
                            ws2.cell(row = q, column = j).value = c.value  

Спасибо большое, если кто-нибудь может мне помочь, заранее спасибо!

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Не уверен, почему вы копируете в один и тот же диапазон назначения каждый раз, но попробуйте это

#!python
import openpyxl as xl

COPY_ROWS = 5
COPY_COLS = 4  
FOLDER = 'C:/Users/aaa/Desktop/'

# source          
filename1 = 'combine_all.xlsx'
wb1 = xl.load_workbook(FOLDER + filename1) 
ws1 = wb1.worksheets[0]                         

#destination
filename2 = 'algorithm.xlsx'
wb2 = xl.load_workbook(FOLDER + filename2) 
ws2 = wb2.active                           

r = 0
i = 1
count = 0
while r < ws1.max_row:
    r += 1
    for c in range(1, COPY_COLS+1):
        for i in range(0,COPY_ROWS):
           ws2.cell(i+3,c).value = ws1.cell(i+r,c).value
    count += 1
    r += i

wb1.close    
wb2.save(FOLDER + "algorithm1.xlsx")  
wb2.close

print("{} blocks of {} rows by {} columns copied".format(count,COPY_ROWS,COPY_COLS))

0 голосов
/ 16 марта 2020
import pandas as pd

excel_file = "C:/Users/aaa/Desktop/combine_all.xlsx"
input = pd.read_excel(excel_file)
input.to_excel('output.xlsx', index=False)

см. учебник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...