回答編集履歴

2

誤字修正

2017/10/15 14:18

投稿

dodox86
dodox86

スコア9385

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  0. Python + win32com は利用しない。なぜならば、Active Xコンポーネントの使い方+win32comモジュールの使い方+"Pan Active Market Database 1.3" Active X固有の使い方それぞれを覚えなければ使えず、困難を伴う。私(dodox86)が遭ったような問題がまた別にあるかもしれず、解決が難しいことも考えられる。
58
58
 
59
59
  1. まずはExcelVBAでのサンプルソースをもとに当該Active Xコントールを使って目的の機能を簡単に作り、習熟する。
60
- 2. C# なりなんなりで、Visual Studio で.NET Frameworkベースの製品版アプリ作る。
60
+ 2. C# なりなんなりで、Visual Studio で.NET Frameworkベースの製品版アプリ作る。
61
61
 
62
62
  Visual Studio で.NET Frameworkベースの言語でActive Xコントロールを使用するのは、簡単です。実際、Visual Studio 2012 + C#でテストプログラムを作り、今回の"Pan Active Market Database 1.3" Active Xコントロールを利用して、指定銘柄の指定範囲の株価の終値一覧を読み出すことができました。
63
63
 

1

改行位置、誤記修正。

2017/10/15 14:18

投稿

dodox86
dodox86

スコア9385

answer CHANGED
@@ -1,27 +1,24 @@
1
1
  本件、興味が沸いたもので当方でも実際に製品を試して動かしていました。
2
2
 
3
- 「Active X COMコンテナアプリケーション」との言い方は、先にご回答をいただいていたようにActive Xコンポーネントを含めた/載せた(コンテナ)アプリケーションとの意味であり、MicrosoftのInternet Explorer やWord等のMicrosoft Officeアプリケーションに代表されるようなプログラム、加えてActive Xコントロールをせた自分で開発したプログラムを含むものです。
3
+ 「Active X COMコンテナアプリケーション」との言い方は、先にご回答をいただいていたようにActive Xコンポーネントを含めた/載せた(コンテナ)アプリケーションとの意味であり、MicrosoftのInternet Explorer やWord等のMicrosoft Officeアプリケーションに代表されるようなプログラム、加えてActive Xコントロールをせた自分で開発したプログラムを指します。
4
4
 
5
5
  ちなみに、Microsoft Office製品群の機能のコア部分は、Active Xコンポーネントとして外部のアプリケーションが利用しやすくなっていることが多いです。Internet Explorerは本体がほとんどそれそのものと言っても良いです。
6
6
 
7
- 1つ目の質問の「ActiveX (COM) コンテナアプリケーションとは何ですか」の回答としては以上です。
7
+ 1つ目の質問の「ActiveX (COM) コンテナアプリケーションとは何ですか」の回答としては以上です。では、2つ目の「Pythonから呼び出せますか?」への回答ですが、基本的に「はい」です。
8
- では、2つ目の「Pythonから呼び出せますか?」への回答ですが、基本的に「はい」です。
9
8
  ただし、質問者様が使いたいと考えている製品のActive Xコントロールは、Python からは使うのが困難なようです。(後述します)
10
9
 
11
10
  基本的に、PythonからActive Xコントロールを操作するには以下のようにします。
12
- 0. 製品をインストールする。これでActive XコントロールがWindows に登録され、
13
- 外部のプログラムから参照/利用できるようになる。(もちろん、インストーラーに依存する)
11
+ 0. 製品をインストールする。これでActive XコントロールがWindows に登録され、外部のプログラムから参照/利用できるようになる。(もちろん、インストーラーに依存する)
14
12
 
15
- 1. Python のwin32com モジュールを使用し、Active X コントロールを操作する。
13
+ 1. Python のwin32com モジュールを使用し、Active X コントロールを操作する。ここで注意しなければならないことは、Pythonもwin32comモジュールも32ビット版を使用することです。(Active Xコントロールが32ビット版であればそれに合わせる)
16
- ここで注意しなければならないことは、Pythonもwin32comモジュールも32ビット版を
14
+
17
- 使用することです。(Active Xコントロールのnnビットに合わせる)
18
- 当方では以下の環境で試しています。
15
+ 当方では以下の環境で試していますので、以下の説明もこれに沿います
19
16
  - Windows 7 Enterprise Edition (64ビット)
20
17
  - Visual Studio 2012 Professional (Update5)
21
18
  - Python 3.6.3 (32ビット)
22
19
  - pywin32-221.win32-py3.6 (32ビット)
23
20
 
24
- 例:Internet Explorer を操作して、teratailのこの質問を開く
21
+ 例:Internet Explorer を操作して、teratailのこの質問を開くには以下のようにします。
25
22
  ```Python
26
23
  #!C:\Python\36-32\python.exe
27
24
  import win32com.client
@@ -52,7 +49,7 @@
52
49
  ただし、残念ですがこれらを使ってプログラムを作り込むのは困難を伴いそうです。
53
50
 
54
51
  製品のサンプルコードのページ「その他のサンプルプログラム(※あえてリンクは示していません)」で、各種のExcelVBAでのサンプルアプリケーションが紹介されています。実際にやりたいことはこれらのExcelVBAのサンプルを参考に、Python + win23comモジュールで実装していければ良いのですが、一部のコード `ActiveMarket.Prices.Read()` メソッドに関してPython win32comモジュールのインターフェースではActive Xコントロール側へ正しい値を渡せない問題がありました。(上記サンプルコードで一部を示していますが、これも不完全です)
55
- これはどちらのバグと言う訳ではなく、制限事項になることだと考えています。(もともとPython win32comモジュールはWindowsとのインターフェースの便宜を図ろう、と言う試みであろうから)
52
+ これはどちらのバグと言う訳ではなく、制限事項になることだと考えています。(もともとPython win32comモジュールはWindowsとのインターフェースの便宜を図ろう、と言う目的であろうから)
56
53
 
57
54
  さて、そんなわけで質問者様のケースではどうしたらよいのでしょうか。
58
55
  私からひとつ提案できるのは、以下のような進め方です。
@@ -62,13 +59,13 @@
62
59
  1. まずはExcelVBAでのサンプルソースをもとに当該Active Xコントールを使って目的の機能を簡単に作り、習熟する。
63
60
  2. C# なりなんなりで、、Visual Studio で.NET Frameworkベースの製品版アプリで作る。
64
61
 
65
- Visual Studio で.NET Frameworkベースの言語でActive Xコントロールを使用するのは、簡単です。
66
- 実際、Visual Studio 2012 + C#でテストプログラムを作り、今回の"Pan Active Market Database 1.3" Active Xコントロールを利用して、指定銘柄の指定範囲の株価の終値一覧を読み出すことができました。具体的には以下のような手順で作ることができるようになります。
62
+ Visual Studio で.NET Frameworkベースの言語でActive Xコントロールを使用するのは、簡単です。実際、Visual Studio 2012 + C#でテストプログラムを作り、今回の"Pan Active Market Database 1.3" Active Xコントロールを利用して、指定銘柄の指定範囲の株価の終値一覧を読み出すことができました。
67
63
 
64
+ 具体的には以下のような簡単な手順で作ることができるようになります。
68
65
  0. 製品(相場アプリケーション)をインストールする。
69
66
  1. Visual StudioでC#のプロジェクトを作成し、プロジェクトで「参照」"Pan Active Market Database 1.3" を追加する。
70
67
 
71
- 以下、抜粋ですが、コードの実例を示します。WPFアプリケーションです。
68
+ 抜粋ですが、コードの実例を示します。WPFアプリケーションです。
72
69
  ```C#
73
70
  // 抜粋
74
71
 
@@ -99,7 +96,7 @@
99
96
  prices.Read(code);
100
97
 
101
98
  ```
102
- 各種のメソッドやその引数は、Visual Studio に標準で装備されている「オブジェクトブラウザー」でメソッドや引数の型を見ることができます。これとExcelVBAのサンプルをもとに実装していけばよろしいかと思います。クラスやメソッドの細かい使用方法については、販売元/開発元に正規のライセンスに沿って尋ねていくのが順当でしょう。
99
+ 各種のメソッドやその引数は、Visual Studio に標準で装備されている「オブジェクトブラウザー」で確認することができます。これとExcelVBAのサンプルを参考に実装していけばよろしいかと思います。クラスやメソッドの細かい使用方法については、販売元/開発元に正規のライセンスに沿って尋ねていくのが順当でしょう。
103
100
 
104
101
  全てのコードを貼り付けるのは止めておきました。teratailおよび製品の規約には抵触しないようでしたが、有償の製品でもありますし、はばかられたのもありますのでその点はご容赦ください。
105
102