如何使用Excel Interop剪切一系列单元格

时间:2017-06-13 18:37:56

标签: c# excel

我有一个列,我正在寻找切割行3-37并将其直接移动到右侧的列。

我尝试了以下操作,它将值正确地向右移动,但单元格样式不会复制。

Range copyRange = ws1.Range["L5:L37"];
Range insertRange = ws1.Range["M5:M37"];
insertRange = copyRange;

我也尝试过这里的解决方案Cut and Paste Columns in Excel Range with c#但似乎没有复制

Range copyRange = ws1.Range["L5:L37"];
Range insertRange = ws1.Range["M5:M37"];
//insertRange.Insert(copyRange.Cut());
insertRange.Insert(XlInsertShiftDirection.xlShiftToRight, copyRange.Cut());

1 个答案:

答案 0 :(得分:1)

如果您只想用源单元格的内容替换目标单元格的内容,并删除源单元格的内容,那么Range.Cut方法应该可以解决这个问题目的地范围作为参数:

Range sourceRange = ws1.Range["L5:L37"];
Range destinationRange = ws1.Range["M5:M37"];
sourceRange.Cut(destinationRange);

这将复制sourceRange到剪贴板,但如果剪贴板上已有一个范围,清除剪贴板。

您也可以只指定目标范围的左上角单元格,它也会执行相同的操作:

Range sourceRange = ws1.Range["L5:L37"];
Range destinationRange = ws1.Range["M5"];
sourceRange.Cut(destinationRange);

如果您想保留源单元格的内容,请使用Copy代替Cut

(请注意,如果insertRange = copyRange;是局部变量,语句insertRange肯定应该从不复制任何位置的任何单元格。这只有在C#支持重载赋值时才会发生(据我所知,它没有)或者某些其他代码以某种方式“感知”了作业。)