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
お時間をいただきありがとうございます。
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 );