実現したいこと
既に開いているExcelファイルを操作したい。
前提
以下のソースで「_soukumiExcelPath」にあたる、
既に開いているExcelを操作したいのですが、
別で「読み取り専用」で開いてきます。
Microsoft.Office.Interop.Excel.Application xlApp = null; Microsoft.Office.Interop.Excel.Workbooks xlBooks = null; Microsoft.Office.Interop.Excel.Workbook xlBook = null; Microsoft.Office.Interop.Excel.Sheets xlSheets = null; Microsoft.Office.Interop.Excel.Worksheet xlSheet = null; Microsoft.Office.Interop.Excel.Range xlCells = null; // Excelアプリケーション生成 xlApp = new Microsoft.Office.Interop.Excel.Application(); // ExcelOpenメソッド xlBooks = xlApp.Workbooks; xlBook = xlBooks.Open(_soukumiExcelPath); // シートを選択する xlSheets = xlBook.Worksheets; xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet; // 1シート目を操作対象に設定する // 表示 xlApp.Visible = true; // セルのオブジェクト xlCells = xlSheet.Cells;
エラーメッセージ
該当のソースコード
C#
1 // Excelアプリケーション生成 2 xlApp = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application"); 3 4 5 // 開かれているすべてのワークブックを調べる 6 foreach (Microsoft.Office.Interop.Excel.Workbook workbook in xlApp.Workbooks) 7 { 8 if (workbook.Name == Path.GetFileNameWithoutExtension(_soukumiExcelPath)) 9 { 10 xlBook = workbook; 11 break; // 見つかったらループを終了 12 } 13 }``` 14 15### 試したこと 16 17上記のソースをchatGPTが書き出してくれて、試したのですが、 18なぜか、xlApp.Workbooks を in する時に、 19勝手にforeachのループを外れて、次の処理へいってしまいます。 20 21ただ開いているExcelを指定したいだけなのに、どんづまってしまいました。 22ご教授のほど、なにとぞよろしくお願いいたします。 23 24### 補足情報(FW/ツールのバージョンなど) 25 26ここにより詳細な情報を記載してください。
6行目のforeach内が実行されてないのですね。
確認となりますが、xlApp.Workbooks.Count の値を表示させるとどうなっているでしょうか?
コメントをありがとうございます。
それは試しておりません。
仕事の案件でして、自宅に帰ってきてしまい、明日もお休みをいただいているため、来週の勤務時間に確認してみます。
ああ、では来週ですね。
KOZ6.0さんの回答の方がより簡単にできると思いますので、そちらを優先して試されるのをおすすめします。
もし仕事環境や案件の制限でnugetができない場合には、私の提示した内容を確認いただいて、地道に解決するしかないかなと思います。
ありがとうございます。そうします。
カウント自体されてなかったら、、、と思うと気が重いです。。。
こんにちは!さきほど、確認してみたところ、カウント「0」でした。。。認識さえしていなかったのですね。
KOZ6.0さんの回答で、「追記:既存の Excel を捕まえる手段」で教えていただいた方法で試してみたところ、できるようになりました!!
toge_さんにアドバイスいただいたように、「nugetが仕事環境でよいかどうか、確認する」という行為自体を考えていなかったので、nugetなしの方で進めるという判断が出来ました。アドバイスいただなかったら、新しいもの好きの自分はすぐに試していたと思います💦
結構、完成に近いアプリなので、新しいことは避けて一旦作り上げたいと思います。
次回以降、新規でアプリを作る際に、nugetを導入して、解放処理など簡便にしていきたいと思います。
本当にお世話になりました。ありがとうございました!!

回答1件
あなたの回答
tips
プレビュー