web-dev-qa-db-ja.com

Excel Interop-他のすべての後に新しいワークシートを追加します

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メソッドとAddメソッドの両方でMoveパラメーターとして文字列として渡すことも試みました。

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

ありがとう

28
JMK

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

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 
50
Dave

これは仕事をするはずです:

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
6
Radu D

これは私のために働く唯一の方法です:

xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.Add
    (System.Reflection.Missing.Value,
     xlWorkBook.Worksheets[xlWorkBook.Worksheets.Count], 
     System.Reflection.Missing.Value, 
     System.Reflection.Missing.Value);
3
shiroxx