我的第二个范围复制完美但第一个什么都不做?

My 2nd range copys perfect but the first does nothing?

所以我得到了几乎相同的不同块,第二个范围完美复制但第一个什么都不做。知道发生了什么事吗?我已经尝试了我能想到的一切。我检查了宏以确保在将范围粘贴到工作簿后它们没有清除范围,由于范围为空,宏在执行任何操作之前停止。

import win32com.client
import openpyxl

#1st range
wb = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Export.xlsx") 
sheet = wb["Export"] 


template = openpyxl.load_workbook(filename='C:/Users/tyler/Desktop/Beef Web/Wall Types Live.xlsm', read_only=False, keep_vba=True) #Add file name
temp_sheet = template["Raw Export"] 



def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []

    for i in range(startRow,endRow + 1,1):

        rowSelected = []
        for j in range(startCol,endCol+1,1):
            rowSelected.append(sheet.cell(row = i, column = j).value)

        rangeSelected.append(rowSelected)

    return rangeSelected




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 first...")
    selectedRange = copyRange(1,2,11,100000,sheet) 
    pastingRange = pasteRange(1,12,11,100000,temp_sheet,selectedRange) 

    print("Complete!")

Go = createData()
#Run macros
xl=win32com.client.Dispatch('Excel.Application')
xl.Workbooks.Open(Filename=r'C:\Users\tyler\Desktop\Beef Web\Wall Types Live.xlsm', ReadOnly=0)
xl.Application.Run('Python')
del xl
#2nd range
wb = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Wall Types Live.xlsm") 
sheet = wb["E1 Final"] 


template = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Export.xlsx") 
temp_sheet = template["Export"] 



def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []

    for i in range(startRow,endRow + 1,1):

        rowSelected = []
        for j in range(startCol,endCol+1,1):
            rowSelected.append(sheet.cell(row = i, column = j).value)

        rangeSelected.append(rowSelected)

    return rangeSelected



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 second...")
    selectedRange = copyRange(1,1,19,100000,sheet) 
    pastingRange = pasteRange(1,1,19,100000,temp_sheet,selectedRange) 

    template.save("Finishtest.xlsx")
    print("Complete!")

Go = createData()

您正在创建函数(copyRangepasteRange 以及 createData),然后为 "second run" 重新创建它们。这不是好的编码习惯,会导致意想不到的效果。我已将您的代码调整为每个函数只有一个定义。最后,当您调用 main 函数时,它将按照您指定的顺序执行代码,并且使用 createData 您可以调用每个范围选择的值。

import win32com.client
import openpyxl

#1st range
wb = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Export.xlsx") 
sheet = wb["Export"] 


template = openpyxl.load_workbook(filename='C:/Users/tyler/Desktop/Beef Web/Wall Types Live.xlsm', read_only=False, keep_vba=True) #Add file name
temp_sheet = template["Raw Export"] 


def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []
    sheet.unmerge_cells(start_row=startRow, start_column=startCol, end_row=endRow, end_column=endCol)
    for i in range(startRow,endRow + 1):

        rowSelected = []
        for j in range(startCol,endCol+1):
            rowSelected.append(sheet.cell(row = i, column = j).value)

        rangeSelected.append(rowSelected)

    return rangeSelected


def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving,copiedData):
    countRow = 0
    for i in range(startRow,endRow+1):
        countCol = 0
        for j in range(startCol,endCol+1):
            sheetReceiving.cell(row = i, column = j).value = copiedData[countRow][countCol]
            countCol += 1
        countRow += 1

def run_macros():
    #Run macros
    xl=win32com.client.Dispatch('Excel.Application')
    xl.Workbooks.Open(Filename=r'C:\Users\tyler\Desktop\Beef Web\Wall Types Live.xlsm', ReadOnly=0)
    xl.Application.Run('Python')
    del xl
    #2nd range
    wb = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Wall Types Live.xlsm") 
    sheet = wb["E1 Final"] 


    template = openpyxl.load_workbook("C:/Users/tyler/Desktop/Beef Web/Export.xlsx") 
    temp_sheet = template["Export"] 



def createData():
    print("Processing first...")
    selectedRange = copyRange(1,2,11,100000,sheet) 
    pastingRange = pasteRange(1,12,11,100000,temp_sheet,selectedRange) 

    print("Complete!")

    run_macros()

    print("Processing second...")
    selectedRange = copyRange(1,1,19,100000,sheet) 
    pastingRange = pasteRange(1,1,19,100000,temp_sheet,selectedRange) 

    template.save("Finishtest.xlsx")
    print("Complete!")

if __name__ == "__main__":
    createData()

@APhillips 我终于明白了 运行。 openpyxl 有一个与我的代码无关的问题,所以我最终只用 win32com 完成了整个过程。这是工作代码。

import win32com.client
import openpyxl

def CopyIn_run_macros():
    #Run macros
    xl=win32com.client.Dispatch('Excel.Application')
    BC=xl.Workbooks.Open('Processing File 1 Path')
    xl.Application.Run('Python2')
    EXP=xl.Workbooks.Open('Import Data File Path')
    print("Importing Export To Processing Sheet....")
    EXP.Sheets('Sheet1').Range('A2:K100000').Copy()
    BC.Sheets('Sheet1').Paste(BC.Sheets('Sheet1').Range('A12'))
    EXP.Close(True)
    print("Complete.")
    print("Running Macros....")
    xl.Application.Run('Python')
    print("Complete.")
    print("Exporting Export Processed Data....")
    FIN=xl.Workbooks.Open('C:/Users/tyler/Desktop/Beef Web/Finish.xlsx')
    BC.Sheets('Sheet2').Range('A1:T100000').Copy()
    FIN.Sheets('Sheet1').Paste(FIN.Sheets('Sheet1').Range('A1'))
    BC.Sheets('Sheet3').Range('A1:H100000').Copy()
    FIN.Sheets('Sheet2').Paste(FIN.Sheets('Sheet2').Range('A1'))
    BC.Sheets('Sheet4').Range('A1:AG100000').Copy()
    FIN.Sheets('Sheet3').Paste(FIN.Sheets('Sheet3').Range('A1'))
    FIN.Close(True)
    print("Complete.")
    del xl


CopyIn_run_macros()