[Q&A][Excel] 类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线程:

通过上面两端VBA代码可以知道,Excel在处理不同进程之间的粘贴时,是通过WorkSheet.PasteSpecial方法处理的;所以在C#中将拷贝代码改为如下:

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

即先对数据源Range进行Copy,然后选择要粘贴的Range,再进行粘贴。

时间: 2024-10-29 14:42:19

[Q&A][Excel] 类Range的PasteSpecial方法无效的相关文章

Excel 使用AutoFill提示“类Range的AutoFill方法无效”

今天遇到一个神奇的问题,之前一直使用很好的代码突然报错:“类Range的AutoFill方法无效”,在网上搜索了一番,感觉没有一个与我遇到的情况相同的.debug,查看一下代码,发现程序里,AutoFill前后指定的是相同的区域.不知道是不是因为这个原因,只能自己手动测试到底什么情况才会产生这个提示了. 写了一段测试代码: Worksheet sheet = Helper.GetActiveSheet(); Range b = sheet.Cells[1, 1]; Range end = she

php excel类 phpExcel使用方法介绍

phpExcel操作excel可以方便的加入图片,支持jpg gif png格式. 下载地址:http://www.codeplex.com/PHPExcel 下面是总结的几个使用方法 include ‘PHPExcel.php'; include ‘PHPExcel/Writer/Excel2007.php'; //或者include ‘PHPExcel/Writer/Excel5.php'; 用于输出.xls的 创建一个excel $objPHPExcel = new PHPExcel();

022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类单独有自己的main函数. 我们进入main函数一步一步看: public static void main(String[] args) throws Exception { /** 导出文件存放物理路径 * @param fileWebPath * 导出文件web下载路径 * @param fi

Excel的Range对象(C#)

原文:Excel的Range对象(C#) Range 对象是 Excel 应用程序中最经常使用的对象:在操作 Excel 内的任何区域之前,都需要将其表示为一个 Range 对象,然后使用该 Range 对象的方法和属性.一个 Range 对象代表一个单元格.一行.一列.包含一个或者更多单元块(可以是连续的单元格,也可以式不连续的单元格)的选定单元格,甚至是多个工作表上的一组单元格. 在代码中引用范围. Address 属性:这个属性返回范围坐标的字符串,坐标以下面几种格式之一表示,包括:“$A

QT 操作excel 类封装

1 # pro file 2 [plain] view plaincopy 3 CONFIG += qaxcontainer 4 5 QT += core 6 7 QT -= gui 8 9 TARGET = QExcel 10 CONFIG += console 11 CONFIG -= app_bundle 12 13 TEMPLATE = app 14 15 16 SOURCES += main.cpp \ 17 qexcel.cpp 18 19 HEADERS += \ 20 qexce

使用PHP Excel类读取和生成excel文件

使用PHP来生成Excel的方法有很多,比如使用最简单的回车符,制表符来生成,或者直接使用html 的table格式,但这些方式兼容性都有所欠缺.测试了一下PHPExce类,发现太l强大了,可以输出非常复杂的excel表格,另外说一下还可以读取 Excel文件.闲话少说,放出简要代码: <?php require_once './Classes/PHPExcel.php'; $objExcel = new PHPExcel();   $objWriter = new PHPExcel_Write

数据库数据用Excel导出的3种方法

将数据库数据用Excel导出主要有3种方法:用Excel.Application接口.用OleDB.用HTML的Tabel标签 方法1——Excel.Application接口: 首先,需要要Excel.dll这个文件,确保自身机器上装有MS Office,在Office安装目录(../Microsoft Office/OFFICE11/,具体目录取决于自己的安装)中找到Excel.exe,然后放在(../Microsoft Visual Studio 8/SDK/v2.0/Bin)目录中,在C

python2 使用openpyxl 报错UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xd7 in position 20: ordinal not in range(128) 解决方法

# -*- coding: utf-8 -*- #! /usr/bin/env python # author: xiao~~ import openpyxl import sys reload(sys) sys.setdefaultencoding('utf-8') wb2=openpyxl.Workbook() wb2.save('test1.xlsx') print('新建成功') 附上剪短的代码 报错信息 Traceback (most recent call last): File "

面向对象之:元类,反射, 双下方法

[TOC] 1.元类 class A: pass obj = A() print(type('abc')) # <class 'str'> print(type([1,2,3])) # <class 'list'> print(type((22,33))) # <class 'tuple'> # type 获取对象从属于的类 print(type(A)) # <class 'type'> print(type(str)) # <class 'type'