我的解決方法是調用Excel宏爲我做複製粘貼。嘗試將Worksheet和Range對象傳遞給宏時發生錯誤,因此我的代碼只使用字符串標識符。
的Python
def copypaste_range(wb_string,
ws_source_string,
rng_to_copy_string,
ws_destination_string,
rng_to_paste_string):
import xlwings as xw
xw.App.display_alerts = False
folder = r'D:\My Documents'
xls_path = folder + r'\xlwings_macros.xlsb'
wb_macros = xw.Book(xls_path)
wb_macro = wb_macros.macro('copypaste_range')
wb_macro(wb_string,
ws_source_string,
rng_to_copy_string,
ws_destination_string,
rng_to_paste_string)
xw.App.display_alerts = True
wb_macros.close()
VBA
Public Sub copypaste_range(wb_string, _
ws_source_string, rng_to_copy_string, _
ws_destination_string, rng_to_paste_string)
Dim wb As Workbook
Dim fso As New FileSystemObject
If Not IsWorkBookOpen(wb_string) Then
Set wb = Workbooks.Open(fileName:=wb_string)
Else
wb_string = fso.GetFileName(wb_string)
Set wb = Workbooks(wb_string)
End If
Dim rng_to_copy As Range
Dim rng_to_paste As Range
Set rng_to_copy = wb.Sheets(ws_source_string).Range(rng_to_copy_string)
Set rng_to_paste = wb.Sheets(ws_destination_string).Range(rng_to_paste_string)
rng_to_copy.Copy _
Destination:=rng_to_paste
End Sub
您正在按照原樣複製公式值。事實上,你必須處理公式本身,或者更簡單地分配一個**新的公式來反映你的例子中的當前行。 – stovfl