0

スプレッドシート内のすべてのシートを反復処理すると、次のエラー メッセージが表示されました:
「Microsoft.Office.Interop.Excel.Worksheet」型に透過プロキシをキャストできません。

このスプレッドシートには、明らかにシートにキャストできないグラフ タブがいくつかあります。したがって、このコードを実行すると、上記のエラーが発生します。

foreach (Microsoft.Office.Interop.Excel.Worksheet activeSheet in xlApp.Sheets)
{

}

私は解決策を見つけるために周りを見回しましたが、何人かの人々がそれに遭遇しました-私にとっては別のシナリオです 。 4e6a-84dc-7f8a9440fe0a

これまでの回避策に満足していません。例外は例外的に使用する必要があると思いますが、これはそれらの場所の1つではありません:

for (int i = 0; i < xlApp.Sheets.Count; i++)
{
    try
    {
        Worksheet wk = (Worksheet)xlApp.Sheets[i];
    }
    catch (Exception)
    {
        //This isn't a sheet - avoid sheet operations
    }
}

Try-Catch を必要とせずにシートを反復処理する (非シートをスキップする) 方法を誰かが知っているかどうか疑問に思っていますか? シートが実際にはシートではないかどうかを判断できる Excel オブジェクト モデルのメソッドまたはプロパティはありますか?

4

1 に答える 1

4

どうですか:

foreach (object possibleSheet in xlApp.Sheets)
{
    Microsoft.Office.Interop.Excel.Worksheet aSheet = possibleSheet as Microsoft.Office.Interop.Excel.Worksheet;
    if (aSheet == null)
        continue;

    // your stuff here
}

もちろん、チャートタブのみで例外が発生し、他のシートでは例外が発生しない場合にのみ機能します。

于 2012-05-25T04:47:34.100 に答える