質問編集履歴

5

追記日付を太字に修正

2022/01/06 06:05

投稿

dn_
dn_

スコア141

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- 2020年1月5日18時00分追記
45
+ **2020年1月5日18時00分追記**
46
46
 
47
47
 
48
48
 
@@ -202,7 +202,7 @@
202
202
 
203
203
 
204
204
 
205
- 2020年1月6日15時00分追記
205
+ **2020年1月6日15時00分追記**
206
206
 
207
207
 
208
208
 

4

追加情報記載

2022/01/06 06:05

投稿

dn_
dn_

スコア141

test CHANGED
File without changes
test CHANGED
@@ -195,3 +195,65 @@
195
195
  ビルド:64ビット
196
196
 
197
197
  NG
198
+
199
+
200
+
201
+ ---
202
+
203
+
204
+
205
+ 2020年1月6日15時00分追記
206
+
207
+
208
+
209
+ 現象が出るマシンと出ていないマシンがあり、
210
+
211
+ 環境に依存して現象が発生しているようです。
212
+
213
+ 現象が出るマシンと出ていないマシンの違いは次の通りでした。
214
+
215
+
216
+
217
+ 現象が出ているマシンで64ビットビルドしたものは、
218
+
219
+ Type.GetTypeFromProgID("Excel.Application")で
220
+
221
+ Typeとして、「System.__ComObject」が返って来ていました。
222
+
223
+
224
+
225
+ しかし32ビットビルドだと
226
+
227
+ Typeとして、「Microsoft.Office.Interop.Excel.ApplicationClass」が
228
+
229
+ 返って来ます。
230
+
231
+
232
+
233
+ 現象が出ていないマシンでは、
234
+
235
+ 32ビットと64ビットのどちらでも、
236
+
237
+ Typeとして、「Microsoft.Office.Interop.Excel.ApplicationClass」が返って来ます。
238
+
239
+
240
+
241
+
242
+
243
+ COMオブジェクトの場合はGetType()をすると「System.__ComObject」という
244
+
245
+ クラスで取得されることもあるようです。
246
+
247
+ どのようなケースでそうなるか明確な情報は見つけられませんでした。
248
+
249
+
250
+
251
+ 下記URLでも類似の現象が出ており、
252
+
253
+ Excel(ストアアプリ)→ オフィス2016のデスクトップ版
254
+
255
+ の変更により解消した様です。
256
+
257
+ しかしストアアプリでも遅延バインディングは利用できる為、今回現象とは関係ないかもしれません。
258
+
259
+ https://social.technet.microsoft.com/Forums/Windows/ja-JP/77942146-7be9-4409-81cc-aa19e1ba4ad9/1245012503125221236312425excel12364216281240320986123791239412356?forum=Office2016ITProJP

3

水平線追加

2022/01/06 06:04

投稿

dn_
dn_

スコア141

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
-
41
+ ---
42
42
 
43
43
 
44
44
 

2

環境検証、ソースコード、実行結果を記載

2022/01/05 09:07

投稿

dn_
dn_

スコア141

test CHANGED
File without changes
test CHANGED
@@ -35,3 +35,163 @@
35
35
 
36
36
 
37
37
  見識のある方がいらっしゃいましたら、よろしくお願いします。
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ 2020年1月5日18時00分追記
46
+
47
+
48
+
49
+ 環境検証、ソースコード、実行結果を記載します。
50
+
51
+
52
+
53
+ 検証環境
54
+
55
+ OS:Windows10 20H2
56
+
57
+ ビルド環境:Microsoft Visual Studio Professional 2019 Version 16.11.3
58
+
59
+ フレームワーク:.NET Framework4.8
60
+
61
+ Excel2013 15.0.5381.1000 32ビット
62
+
63
+
64
+
65
+ ```C#
66
+
67
+ using System;
68
+
69
+ using System.Collections.Generic;
70
+
71
+ using System.Linq;
72
+
73
+ using System.Reflection;
74
+
75
+ using System.Threading.Tasks;
76
+
77
+ using System.Windows.Forms;
78
+
79
+ using System.Threading;
80
+
81
+ namespace WindowsFormsApp13 {
82
+
83
+
84
+
85
+ static class Program {
86
+
87
+
88
+
89
+ [STAThread]
90
+
91
+ static void Main() {
92
+
93
+ Console.WriteLine("ビルド:"+(IntPtr.Size==4?"32ビット":"64ビット"));
94
+
95
+
96
+
97
+ Type objeType = Type.GetTypeFromProgID("Excel.Application");
98
+
99
+
100
+
101
+ dynamic _APPLICATION = Activator.CreateInstance(objeType);
102
+
103
+
104
+
105
+ _APPLICATION.Visible = true;
106
+
107
+
108
+
109
+ EventInfo eventInfo = _APPLICATION.GetType().GetEvent("SheetSelectionChange");
110
+
111
+
112
+
113
+ if(eventInfo!=null){
114
+
115
+ Console.WriteLine("OK");
116
+
117
+
118
+
119
+ Type eventType = eventInfo.EventHandlerType;
120
+
121
+
122
+
123
+ Type type = typeof(Program);
124
+
125
+
126
+
127
+ MethodInfo methodInfo = type.GetMethod("SheetSelectionChangeEvent");
128
+
129
+
130
+
131
+ Delegate d = Delegate.CreateDelegate(eventType, methodInfo);
132
+
133
+
134
+
135
+ eventInfo.AddEventHandler(_APPLICATION, d);
136
+
137
+ }else{
138
+
139
+ Console.WriteLine("NG");
140
+
141
+ }
142
+
143
+ Console.ReadKey();
144
+
145
+ }
146
+
147
+
148
+
149
+ public static void SheetSelectionChangeEvent(object sheet, object range){
150
+
151
+ Console.WriteLine("SheetSelectionChangeEvent");
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+ ```
160
+
161
+
162
+
163
+
164
+
165
+ 実行結果はビルド毎に下記の通りとなりました。
166
+
167
+
168
+
169
+ ・32ビットビルド時
170
+
171
+  ※起動したエクセルで新規ファイルを開いてセル選択を何度か実行
172
+
173
+
174
+
175
+ ビルド:32ビット
176
+
177
+ OK
178
+
179
+ SheetSelectionChangeEvent
180
+
181
+ SheetSelectionChangeEvent
182
+
183
+ SheetSelectionChangeEvent
184
+
185
+ SheetSelectionChangeEvent
186
+
187
+
188
+
189
+
190
+
191
+ ・64ビットビルド時
192
+
193
+
194
+
195
+ ビルド:64ビット
196
+
197
+ NG

1

原因が64ビットビルドであることが判明した為、64ビットビルドを論点とした内容へ編集

2022/01/05 09:05

投稿

dn_
dn_

スコア141

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  前提として、Excelバージョンに依存しない様にラッパークラスであるMicrosoft.Office.Interop.Excelは利用せずに、遅延バインディングしたいと思っております。
2
2
 
3
3
 
4
+
5
+ 64ビットビルドすると、
4
6
 
5
7
  Type.GetTypeFromProgID("Excel.Application")
6
8
 
@@ -18,7 +20,7 @@
18
20
 
19
21
 
20
22
 
21
- まさに下記ページの方法を行おうとしておりますが、GetEventメソッドの戻り値がnullになってしまいイベントが取れません。環境依存なのか、記事が間違っているのかわかりせん
23
+ まさに下記ページの方法を行おうとしておりますが、64ビットビルドだとGetEventメソッドの戻り値がnullになってしまいイベントが取れません。32ビットビルドで正常に動作し
22
24
 
23
25
  https://littlepower-suesan.hatenadiary.org/entry/20110628/1309266642
24
26
 
@@ -32,6 +34,4 @@
32
34
 
33
35
 
34
36
 
35
- 遅延バインディングの場合はイベントのフックは行えないのでしょうか。
36
-
37
37
  見識のある方がいらっしゃいましたら、よろしくお願いします。