2012-08-28 9 views
20

Excelワークブックに新しいワークシートを追加しようとしていて、これをC#Excel Interopの最後のワークシートにします。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); 
     } 
    } 
} 

はありません、このような運。私が試してみて、最初のシートを追加し、それは私が試した移動が示唆されたMicrosoft.comのthis pageを見つけ

COMException was unhandled - Exception from HRESULT: 0x800A03EC

、以下に示すように、その:私は、この便利なエラーが発生します。私は、このWebページは、エクセル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); 
     } 
    } 
} 

私は上記と同じエラーを取得します。私はAddMoveの両方の方法で、Afterパラメータの文字列として最後のワークシートの名前を渡してみました。

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

おかげで、ここでのドキュメントhttp://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx見れ

+2

JMK - ありませんあなたの問題への答えですが、おそらくC#とExcelの役に立つポインタです。私はLinqToExcelライブラリをかなりの時間使用していますが、実際にはinteropメソドロジを使用してどのくらいクリーンな経験であるかを表現することはできません。時間がある場合は、それを見て、それがあなたの要求に合っているかどうかを見てください。 https://github.com/paulyoder/LinqToExcel http://code.google.com/p/linqtoexcel/ –

+1

@jimtollanヘッドアップいただきありがとうございます、私はLinqToExcelをチェックアウトのポイントを作るでしょう、それはよさそうです。ありがとう! – JMK

答えて

39

、それは後に 'オブジェクトは、数値の位置ではないことを示しています。あなたがシートを配置したいシートを表すオブジェクトです。これは、仕事をする必要があります

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 
+2

これは 'Move'メソッドのパラメータとしては機能しませんでしたが、' Add'メソッドのパラメータとして機能しました!どうもありがとうございました! – JMK

+0

これでテストが完了しました。これは多くの意味があります。あなたが言ったように、新しいシートは数字の後に挿入されていませんが、その番号の付いた位置にあるシートの後ろにあります(Excelのベース1)。 –

6

:コードは、おそらく(未テスト)のようなものでなければなりません

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]); 
3

これは私の作品の唯一の方法である:

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); 
関連する問題