Python复制特定的行和列并更新现有的模板文件

时间:2018-08-07 23:35:16

标签: python excel pandas openpyxl

我需要执行的代码:

  • 从“ NewData.xlsx”复制A-D列下的所有行,并在名为“ updated.xlsx”的“ template.xlsx”的副本中更新A-D列下的所有行。

代码的实际作用:

  • 它(成功!)在一个名为“ updated.xlsx”的更新模板文件中创建了一个名为“ NEW_DATA”的新模板工作表,并将数据写入。...全部保存在一个单元格中。

(我需要将大量GPS数据传输到现有表中以进行工作-以防万一有人好奇我为什么要这样做。)

与我先前阅读的问题不同,我不想在更新数据时修改列数或行数,也不想将数据粘贴到新标签中,也不想复制整个工作表或xlsx文件,而我不想将数据附加到现有数据下面。

import openpyxl
import pandas as pd

# create variable df containing updated data in excel
DataAsXlsx = r'C:\Users\...\NewData.xlsx'
xl_workbook = pd.ExcelFile(DataAsXlsx)  # Load the excel workbook
df = xl_workbook.parse("Sheet")  # Parse the sheet into a dataframe

#Reads template xlsx, creates template sheet 'NEW_DATA'
template = openpyxl.load_workbook(r'C:\Users\...\template.xlsx')
template.sheetnames
sheet1 = template.worksheets[0]
sheet1.title = 'NEW_DATA'
sheet1 = template['NEW_DATA']

#^^^everything above this line works^^^


#Code below attempts to copy rows AND columns from NewData.xlsx and paste to sheet 'NEW_DATA' in updated.xlsx

for row in range(1, sheet1.max_row+1): 
   cell = sheet1.cell(row=row, column=1)
   if cell.value is not None:
        cell.value = str(df)

#This pastes ALL DATA into ColA of sheet 'NEW_DATA' in updated.xlsx

template.save('updated.xlsx')

这是NewData.xlsx在Excel中的外观:

what NewData.xlsx looks like in excel

出于调试目的,template.xlsx可以是任何现有的excel文件。

我已经读过Update rows and column using openpyxl from python,它有助于遍历模板文件,但是它使用硬编码数据“(c)”,并且此逻辑无法传递到我所需要的逻辑上。

我已经阅读了有关熊猫和openpyxl的几乎所有问题,还阅读了文档。我对下一步的工作一无所知。

更新

根据查理的反馈,我做了以下事情:

from openpyxl import load_workbook

wb1 = load_workbook(r'C:\Users\...\NewData.xlsx')
wb2 = load_workbook(r'C:\Users\...\template.xlsx')
ws1 = wb1['Sheet']
ws2 = wb2.get_active_sheet() 

for row in ws1.iter_rows(max_col=4):
        values = (c.value for c in row)
        ws2.append(values)
ws2.save('updated.xlsx')

这会将数据追加到现有数据集的底部(它应该替换COL A-D中的数据)任何建议都可以帮助-我是如此接近!

最终更新

  

万岁-这行得通!!!

import pandas as pd

#use pandas to access the new data 
DataAsXlsx = pd.read_excel(r'C:\Users\...\NewData.xlsx', sheet_name='Sheet1')

#this reads the template file
template = r'C:\Users\...\template.xlsx'
df = pd.read_excel(template)

#this creates a new document named FinalAutomatedDataSheet.xlsx
writer = pd.ExcelWriter(r'C:\Users\....\FinalAutomatedDataSheet.xlsx') 

#this line overlays the template file data onto FinalAutomatedDataSheet.xlsx
df.to_excel(writer, startcol=0,startrow=0, index=False)

#This line writes the new data to FinalAutomatedDataSheet.xlsx
#NOTE: you can SPECIFY COLUMN and ROW indices below!!:
DataAsXlsx.to_excel(writer, startcol=0,startrow=0, index=False)

writer.save()

1 个答案:

答案 0 :(得分:1)

您当前的代码尝试将整个数据帧粘贴到一个单元格中。

如果您只是在工作表之间进行复制,那么我建议您使用openpyxl的只读模式来读取数据。

%%~nA