复制和粘贴单元格区域的完整过程描述如下:
>>> sht.Range("A1").Select()
>>> app.Selection.Copy()
>>> sht.Range("C1").Select()
>>> sht.Paste()
首先是选择要复制的单元格或区域,用Copy方法将数据复制到剪贴板,然后选择进行粘贴的目标单元格或区域,用Paste方法进行粘贴。省略选择单元格或区域的步骤,该代码可以简化为:
>>> sht.Range("A1").Copy(sht.Range("C1"))
其中,A1是源单元格,C1是目标单元格。
下面将单元格A1的当前区域复制到A4为左上角单元格的目标区域。
>>> sht.Range("A1").CurrentRegion.Copy(sht.Range("A4"))
效果如图2-13所示。
图2-13 复制区域到指定位置
使用单元格对象的PasteSpecial方法,可以进行选择性粘贴。该方法的语法格式为:
单元格区域对象.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
PasteSpecial方法有4个参数:
• Paste参数:表示选择性粘贴的类型,取值如表2-2所示。
表2-2 Paste参数的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlPasteAll | -4104 | 粘贴全部内容。 |
| xlPasteComments | -4144 | 粘贴批注。 |
| xlPasteFormats | -4122 | 粘贴复制的源格式。 |
| xlPasteFormulas | -4123 | 粘贴公式。 |
| xlPasteFormulasAndNumberFormats | 11 | 粘贴公式和数字格式。 |
| xlPasteValues | -4163 | 粘贴值。 |
| xlPasteValuesAndNumberFormats | 12 | 粘贴值和数字格式。 |
• Operation参数:粘贴时是否与原有内容进行运算以及运算的类型。其取值如表2-3所示。
表2-3 Operation参数的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlPasteSpecialOperationAdd | 2 | 复制的数据将被添加到目标单元格中的值。 |
| xlPasteSpecialOperationDivide | 5 | 复制的数据将除以目标单元格中的值。 |
| xlPasteSpecialOperationMultiply | 4 | 复制的数据将与目标单元格中的值相乘。 |
| xlPasteSpecialOperationNone | -4142 | 粘贴操作中不执行任何计算。 |
| xlPasteSpecialOperationSubtract | 3 | 复制的数据将从目标单元格中的值中减去。 |
• SkipBlanks参数:忽略空白单元格。
• Transpose参数:对行列数据进行转置。
下面举例说明该方法的使用。
下面的代码把图2-8中工作表内第1行的数据复制到第4行。
>>> sht.Range("A1:E1").Copy()
>>> sht.Range("A4:E4").PasteSpecial(Paste=constants.xlPasteValues)
下面的代码先给单元格B1添加一个批注,然后将工作表内第1行的批注复制到第5行。
>>> sht.Range("B1").AddComment("CommentTest")
>>> sht.Range("A1:E1").Copy()
>>> sht.Range("A5:E5").PasteSpecial(Paste=constants.xlPasteComments)
下面的代码先给单元格A2添加一些格式,包括设置背景色为绿色,设置字体大小为20,加粗,倾斜,然后将工作表内第2行的格式复制到第6行。
>>> sht.Range("A2").Interior.Color=RGB(0,255,0)
>>> sht.Range("A2").Font.Size=20
>>> sht.Range("A2").Font.Bold=True
>>> sht.Range("A2").Font.Italic=True
>>> sht.Range("A2:E2").Copy()
>>> sht.Range("A6:E6").PasteSpecial(Paste=constants.xlPasteFormats)
最后得到的效果如图2-14所示。
图2-14 选择性粘贴
剪切操作,实际上是进行复制粘贴以后把原来位置上的数据删除。使用单元格对象的Cut方法把源单元格的内容移动到目标单元格。下面把A1:E1区域的数据剪切到A7:E7:
>>> sht.Range("A1:E1").Cut(Destination=sht.Range("A7"))
参数名称Destination可以省略:
>>> sht.Range("A1:E1").Cut(sht.Range("A7"))
用单元格对象的Delete方法删除单元格或区域。Delete方法的语法格式为:
rng.Delete(Shift)
其中,rng为单元格或区域对象。shift参数的取值xlShiftToUp时,删除单元格后,该单元格下面的单元格依次往上移;值为xlShiftLeft时,删除单元格后,该单元格右侧的单元格依次往左移。如果不带参数,Excel会根据前面的引用情况自行判断使用哪个值。
下面删除单元格A2和区域C3:E5。
>>> sht.Range("A2").Delete(Shift=constants.xlShiftToUp)
>>> sht.Range("C3:E5").Delete()