環境說明:
VS2013(C#) + Office2013
Bug說明:
range1.Copy(Type.Missing);
range2.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
false
,
false
);
其中 range1 和 range2 來自兩個 Excel.Applicaton,即想從一個 Excel.Applicaton1 中拷貝數據到另一個 Excel.Applicaton2 中,會出現“類 Range 的 PasteSpecial 方法無效”的異常;(在 C# 中通過 Excel.Application 可以 New 出來不同線程的 Excel 進程,然后各自處理數據)
參考解決方法:
先從 Excel.Applicaton1 的錄制宏模擬該操作,然后根據宏代碼(VBA)來調整代碼;
在源 Excel.Application1 中進行拷貝的宏代碼:
Sub 宏2() Range("F11:J11").Select Application.CutCopyMode = False Selection.Copy End Sub
然后在另一個 Excel.Applicaton2 中粘貼的宏代碼:
Sub 宏2() Range("G13").Select ActiveSheet.PasteSpecial Format:="文本", Link:=False, DisplayAsIcon:=False End Sub
在粘貼時會彈出提示框:
注意,如果是在同一個 Excel 線程下打開的兩個 Excel 文件,粘貼時是不會出現該提示框的,可以從任務管理器中查看是否是同一個 Excel 線程。
通過上面兩端 VBA 代碼可以知道,Excel 在處理不同進程之間的粘貼時,是通過 WorkSheet.PasteSpecial 方法處理的;所以在 C# 中將拷貝代碼改為如下:
sourceRng.Copy(); targetRng.Select(); m_TargetSheet.PasteSpecial("文本", false, false);
即先對數據源 Range 進行 Copy,然后選擇要粘貼的 Range,再進行粘貼。