C# 使用c在Excel范围内剪切和粘贴列#

C# 使用c在Excel范围内剪切和粘贴列#,c#,excel,C#,Excel,我试图在excel工作表中将B列移到Q列前面,作为我正在编写的报告的一部分。我在VBA方面有经验,但在c#方面的经验相对较少,所以我在Google上花了最后一个小时,找不到解决方案,我觉得这应该很简单,但我不太明白 方法一,它导致“插入Range类的方法失败”消息 Excel.Range rngCut1 = JobLabourSheet.get_Range("B:B", Type.Missing); Excel.Range rngPaste1 = JobLabourSheet.get_Range

我试图在excel工作表中将B列移到Q列前面,作为我正在编写的报告的一部分。我在VBA方面有经验,但在c#方面的经验相对较少,所以我在Google上花了最后一个小时,找不到解决方案,我觉得这应该很简单,但我不太明白

方法一,它导致“插入Range类的方法失败”消息

Excel.Range rngCut1 = JobLabourSheet.get_Range("B:B", Type.Missing);
Excel.Range rngPaste1 = JobLabourSheet.get_Range("Q:Q", Type.Missing);
            rngCut1.Columns.Cut(rngPaste1.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, rngCut1));
方法2导致“无法获取Range类的Cut属性”消息

Excel.Range rngCut1 = JobLabourSheet.get_Range("B:B", Type.Missing);
Excel.Range rngPaste1 = JobLabourSheet.get_Range("Q:Q", Type.Missing);
            rngCut1.Columns.Cut(rngPaste1.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Missing.Value));
在第二种方法中,当我省略CopyOrigin时,我会得到msg,但它会在列Q前面插入一个空白列

在VBA中,我将使用以下内容:

Columns("B:B").Cut
Columns("Q:Q").Insert Shift:=xlToRight

但正如我所说,我的c#经验目前有限,因此我不知道如何将其翻译成c#

这不是很直观,但这是我如何使其工作的。我获取了一个“insert”范围,并使用insert()方法,并传递了一个“range.Cut()”方法作为“Copy Origin”参数

参考文件:

以下是一个示例应用程序(请确保添加对Microsoft.Office.Interop.Excel的引用):


看一看。可能是@Ken White的复制品,我确实看了那篇文章,但无法让anwers工作。嗨,Joseph,我尝试了你的方法,它工作了,但不是我所需要的。使用rngCut1.Cut(rngPaste1);将其从B列中剪切(B列留空)并粘贴到Q列中。但是,它会覆盖Q列中的值。我需要它做的是插入shiftotorght。@Cornelius得到了它。我想出了一些办法。现在将编辑答案。
using System;
using System.Collections.Generic;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelCutAndInsertColumn
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWb = xlApp.Workbooks.Open(@"C:\stackoverflow.xlsx");
            Excel.Worksheet xlWs = (Excel.Worksheet)xlWb.Sheets[1]; // Sheet1

            xlApp.Visible = true;

            // cut column B and insert into A, shifting columns right
            Excel.Range copyRange = xlWs.Range["B:B"];
            Excel.Range insertRange = xlWs.Range["A:A"];

            insertRange.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, copyRange.Cut());
        }
    }
}