6

作業中のレポートの一部として、Excel シートの列 Q の前に列 B を移動しようとしています。私は VBA の経験はありますが、c# の経験は比較的少ないため、過去 1 時間を Google で過ごしましたが、解決策が見つかりません。これは簡単なはずですが、うまくいきません。

「Range クラスのメソッドの挿入に失敗しました」というメッセージが表示される方法 1。

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));

2 番目の方法で CopyOrigin を省略した場合、メッセージは表示されますが、列 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 に答える