0

ワークシートコレクションで名前チェックを行い、そのワークシートが見つかった場合はtrueを返す次のコードがあります。

foreach (Excel.Worksheet sheet in xlApp.Worksheets)
{
    if (sheet.Name.Equals("myXlSheet"))
    {
        resultWorkSheet = (Excel.Worksheet)xlApp.Worksheets.Item["myXlSheet"];
            return true;
    }
}

何らかの理由で、xlApp.Worksheets0x800A03ECエラーが発生することがありますしかし、それはいつも起こるわけではないようです。また、開発環境で同じエラーを再現することはできません。これは本当に困惑します。

では、ここで何が問題なのですか?良いアイデアや提案はありますか?ありがとう。

4

2 に答える 2

0

そのエラーコードをグーグルで検索しましたか?Excelの相互運用に関する結果がたくさんあります。

Excelの相互運用機能はCOMに要約されるため、エラーが発生する言語/コンテキストは実際には重要ではありません。それでも、あなたが間違っていることの手がかりになる可能性があります。

セル内のテキストやセルの数など、ある種の最大長のように見えます。

于 2012-10-16T02:18:00.643 に答える
0

コードは使用しているワークブックを指定していないため、Worksheetsの呼び出しはデフォルトでアクティブなワークブック(古いが関連するMSDN)になります。どういうわけか、現在のユーザーのアクティブなワークブックにそのシートが含まれていないか、ワークブックがなかった場合、エラーが発生します。明らかに、これは発生しないはずですが、プログラミングではほとんどの場合、ありそうもないことが発生することがあります。

私はこれをテストしていませんが、問題の行をこれに更新するとうまくいくと思います:

resultWorkSheet = (Excel.Worksheet)sheet.Parent.Worksheets.Item["myXlSheet"];

編集:私はそれについてもう少し考えて、あなたが実際にどこでエラーが発生するかを示さなかったことに気づきました。

forループを実行する前に、ワークブックがあることを確認する必要があります。次のようなカウントを取得することで、これを確認できます。

if (xlApp.Workbooks.Count != 0) 
{
   //Your loop here
}
于 2012-10-16T03:09:50.340 に答える