web-dev-qa-db-ja.com

C#相互運用機能を使用してExcelからすべてのワークシート名をプレーンテキストで取得しますか?

VS2010 + Office Interop 2007を使用して、5〜6ページのExcelスプレッドシートからいくつかの特定のスプレッドシート名を取得しようとしています。そこから私がしているのは、さらに処理するために必要ないくつかのスプレッドシートをタブ区切りのテキストファイルに保存することだけです。したがって、取得した3つのスプレッドシート名の場合、それぞれに独自のタブ区切りテキストファイルがあります。

相互運用機能を使用して、タブ区切りでファイルを保存できますが、これは、指定されたページ名がわかっていることを前提としています。各ページ名は厳密な命名規則に従わないとのことですが、目的の名前を探すときに「RCP」、「rcp」、「Recipient」などの複数の名前を考慮することができます。

私の質問は、すべてのスプレッドシートのページ名をある種のインデックスで取得できるので、それらを繰り返し処理して、必要な3つの名前を見つけようとすることができますか?これは、「RCP」、「rcp」、「Recipient」のページを数百万回の試行/キャッチで取得しようとするよりもはるかに優れています。

次の方法でExcelスプレッドシートのページ数を取得できるため、近づいています。

Excel.Application excelApp = new Excel.Application();  // Creates a new Excel Application
excelApp.Visible = true;  // Makes Excel visible to the user.           
// The following code opens an existing workbook
string workbookPath = path;
Excel.Workbook excelWorkbook = null;
try
{
    excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0,
    false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true,
    false, 0, true, false, false);
}
catch
{
    //Create a new workbook if the existing workbook failed to open.
    excelWorkbook = excelApp.Workbooks.Add();
}
// The following gets the Worksheets collection
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
Console.WriteLine(excelSheets.Count.ToString()); //dat count

お時間をいただきありがとうございます。

9
foreach ( Worksheet worksheet in excelWorkbook.Worksheets )
{
   MessageBox.Show( worksheet.Name );
}

あなたは辞書を使うことができます:

Dictionary<string, Worksheet> dict = new Dictionary<string, Worksheet>();
foreach ( Worksheet worksheet in excelWorkbook.Worksheets )
{
   dict.Add( worksheet.Name, worksheet );
}
// accessing the desired worksheet in the dictionary
MessageBox.Show( dict[ "Sheet1" ].Name );
14
Derek