我的第二个范围复制完美但第一个什么都不做?
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()
您正在创建函数(copyRange
和 pasteRange
以及 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()
所以我得到了几乎相同的不同块,第二个范围完美复制但第一个什么都不做。知道发生了什么事吗?我已经尝试了我能想到的一切。我检查了宏以确保在将范围粘贴到工作簿后它们没有清除范围,由于范围为空,宏在执行任何操作之前停止。
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()
您正在创建函数(copyRange
和 pasteRange
以及 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()