[Q&A] 類Range的PasteSpecial方法無效


環境說明:

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 文件,粘貼時是不會出現該提示框的,可以從任務管理器中查看是否是同一個 Excel 線程。

通過上面兩端 VBA 代碼可以知道,Excel 在處理不同進程之間的粘貼時,是通過 WorkSheet.PasteSpecial 方法處理的;所以在 C# 中將拷貝代碼改為如下:

sourceRng.Copy();
targetRng.Select();
m_TargetSheet.PasteSpecial("文本", false, false);

即先對數據源 Range 進行 Copy,然后選擇要粘貼的 Range,再進行粘貼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM