6

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

方法一,导致“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));

方法二导致“无法获取 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#

4

1 回答 1

5

这不是很直观,但这就是我让它工作的方式。我采用了“插入”范围并使用了 Insert() 方法并将“range.Cut()”方法作为“复制原点”参数传递。

参考文档:

这是一个示例应用程序(请务必添加对 Microsoft.Office.Interop.Excel 的引用):

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());
        }
    }
}
于 2013-11-09T00:05:53.553 回答