@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

エクセルを別ウィンドウで新規オープンするのは?

1
投稿者投稿内容
ドラゴン
会議室デビュー日: 2007/03/28
投稿数: 7
投稿日時: 2007-03-30 12:09
マイクロソフトオフィスのエクセルは二種類の形式で開かれるようです。
一種類は常に一つのエクセルアプリケーションとしてワークブック形式でマルチドキュメントとして開く方法。
もう一種類は別のウィンドウでエクセルアプリケーションを新規オープンする方法があるようです。

ですが、以下のコードによると何時もマルチドキュメントの形式で開かれますが、
新規オープンする方法はないでしょうか?
宜しくお願いします。
// エクセルのApplication対象の取得
Type objClassType;
objClassType = Type.GetTypeFromProgID("Excel.Application");
objExcelApp = Activator.CreateInstance(objClassType);

// エクセルのWorkbooks対象の取得
objExcelBooks = objExcelApp.GetType().InvokeMember("Workbooks",
BindingFlags.GetProperty, null, objExcelApp, null);
objExcelBook = objExcelBooks.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, objExcelBooks,
new object[] { loadFileName, 0, false, 5, "", "", false, Type.Missing, "", true, false, 0, true });
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-30 14:42
Excel.Application インターフェイスには、複数の Workbook が格納できます。
ドラゴンさんの方法では、同じインスタンスの Workbooks から Workbook を追加しています。

つまり、新しい Excel.Application を生成して、
そこから Workbook を Open または Add すれば新しい Excel のプロセスで表示されます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ドラゴン
会議室デビュー日: 2007/03/28
投稿数: 7
投稿日時: 2007-03-30 15:46
じゃんぬねっとさん、ご返答ありがとう御座います。
新しい Excel.Application を生成してOpenすれば、多分新しいプロセスで開かれるとは思いつきますが、
objExcelApp = Activator.CreateInstance(objClassType);
というのは、新しいオブジェクトをインスタンス生成したのではないでしょうか?

お手数ですが、詳しいコードなどあれば貼って頂けないでしょうか。
宜しくお願いします
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-30 17:37
引用:

ドラゴンさんの書き込み (2007-03-30 15:46) より:

objExcelApp = Activator.CreateInstance(objClassType);
というのは、新しいオブジェクトをインスタンス生成したのではないでしょうか?


言われてみれば、確かにそうですね。
しかし、少し確認させて頂けないでしょうか?

私は先のコードは 「切れ端」 だと思っております。
あのコードの後に objExcelApp または objExcelWorkbooks の
同じインスタンスから Open しているのではないかと、少し疑っています。

理由は 2 つあります。

まず、objExcelApp と objExcelBooks の宣言部分の記述がありませんでした。
しかし、objClassType の宣言部分の記述はあります。

このあたりから、objExcelApp と objExcelBooks は 「ローカル変数ではない」
つまりは、別のメソッドで使いまわしをしているのではないかと、現時点で考えています。
(この前提が違うのであれば、違うと答えてください)

もし私の予想どおりであれば、今回の問題に関わる実装は 'あのコードだけでない' ということになります。

もう 1 つの理由は、やはり 「あのコード自体には問題がない」 というところです。
先ほどのコードを '2 回' 呼び出せば、意図した動作になるはずです。

loadFileName のファイル パスさえ別々であれば、正しく動作します。
(loadFileName はメソッドの引数だと仮定しています)

あのコード自体には問題はないわけですから、別のところに問題があるのではないかと考えるわけです。
よって、上記で申し上げましたように、あのコードは切れ端ではないかと考えています。

このあたり、確認させて頂けないでしょうか?

その上で、全く問題が見つからないとなりますと、
Windows のファイルの関連付けの Action がおかしいなど、別の問題が考えられます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ドラゴン
会議室デビュー日: 2007/03/28
投稿数: 7
投稿日時: 2007-03-30 18:27
長い文章を書くにご苦労様でした。
引用:

このあたりから、objExcelApp と objExcelBooks は 「ローカル変数ではない」
つまりは、別のメソッドで使いまわしをしているのではないかと、現時点で考えています。
もう 1 つの理由は、やはり 「あのコード自体には問題がない」 というところです。
先ほどのコードを '2 回' 呼び出せば、意図した動作になるはずです。

loadFileName のファイル パスさえ別々であれば、正しく動作します。
(loadFileName はメソッドの引数だと仮定しています)


ローカル変数で御座います。
さらに本アプリケーションでは一回一つのエクセルしか編集できないように制約されています。

引用:

あのコード自体には問題はないわけですから、別のところに問題があるのではないかと考えるわけです。
よって、上記で申し上げましたように、あのコードは切れ端ではないかと考えています。

このあたり、確認させて頂けないでしょうか?
その上で、全く問題が見つからないとなりますと、
Windows のファイルの関連付けの Action がおかしいなど、別の問題が考えられます。


説明不足ですみませんでした。今の現状を改めに説明させて頂きます。
C#でローカルアプリケーションを作っていますが、エクセル操作及びプレビューの機能を実現しなければいけません。
現状はアプリでエクセルを開くと元ユーザーが開かれているエクセルと影響が発生します。
編集中(セールにフォーカスが入っている)に元のエクセルに交換できない、
別のエクセルをオープンできない等のブロック現状が発生します。
主の原因としては同一エクセルプロセスで開かれたからこそ問題があると思い。
別のプロセスで開かれないかと考えており、質問させて頂いたのです。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-30 19:11
引用:

ドラゴンさんの書き込み (2007-03-30 18:27) より:

現状はアプリでエクセルを開くと元ユーザーが開かれているエクセルと影響が発生します。


なるほど、コードを 2 回実行した時の話ではなく、
Explorer から Excel がすでに起動している場合のお話だったようですね。

引用:

編集中(セールにフォーカスが入っている)に元のエクセルに交換できない、別のエクセルをオープンできない等のブロック現状が発生します。
主の原因としては同一エクセルプロセスで開かれたからこそ問題があると思い。


これは違うと思います。
あのコードであれば、違うプロセスで起動します。

一応、別の Workbook を開き Cell を編集状態にして実行してみましたが、やはり問題ありませんでした。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)