35

新しいワークシートを Excel ワークブックに追加し、これを C# Excel Interop の本の最後のワークシートにしようとしています。

それは本当に簡単に思えます。私は以下のコードでそれができると思いました:

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var excel = new Excel.Application();

            var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(excel);
        }
    }
}

そのような幸運はありません。次の役立つエラーが表示されます。

COMException が処理されませんでした - HRESULT からの例外: 0x800A03EC

Microsoft.comでこのページを見つけたので、最初にシートを追加してから移動することを提案したので、以下に示すように試しました。この Web ページが Excel 95 をターゲットにしていることはわかっていますが、VBA はまだ使用できるので、まだ機能することを期待していました。

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var excel = new Excel.Application();

            var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add();
            workbook.Sheets.Move(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(excel);
        }
    }
}

上記と同じエラーが発生します。また、メソッドとメソッドAfterの両方で、最後のワークシートの名前をパラメーターとして文字列として渡そうとしましたが、うまくいきません!AddMove

それが私が試したことなので、私の質問は、C# Excel Interop を使用してワークシートを Excel ワークブックに追加し、これをワークブックの最後のシートにする方法です。

ありがとう

4

4 に答える 4

66

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspxのドキュメントを見ると、「後」オブジェクトが数値の位置ではありません。これは、シートを配置したいシートを表すオブジェクトです。コードはおそらく (未テスト) のようなものになるはずです:

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 
于 2012-08-28T09:28:26.037 に答える