10

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

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

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

次の方法で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

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

4

1 に答える 1

16
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 );
于 2013-09-13T13:56:42.187 に答える