OkiTool開発日記

データベース参照ツールを開発しています。そのツールの開発、利用方法秘話などなどの紹介

WebBoewserでのOffice埋め込み表示

以前のOfficeバージョンではWebBoewserでOffice(Excel、Word)の埋め込み表示が出来ていたが、2010では出来なくなったので調べたところ、レジストリの設定変更で可能との事

わざわざ、officeのプレビューにDsoframer.ocxを利用していたが、WebBoewserで出来るなら、配布モジュールも少なくなるのでと思い試してみた


テスト動作

1)別プロセスでエクセルを起動 ・・・ これをAプロセスとします

2)WebBoewserでエクセルを表示

 

結果は、Dsoframer.ocxとほぼ同じ動作

2)のWebBoewserでエクセルを表示するとき、Aプロセスでなく新規にExcelプロセスを立ち上げることを期待したが、Aプロセスに相乗りし表示する

この時、AプロセスのExcelはロックされアクティブに出来ない様になってしまった


2007以降のExcelでは複数のExcelを立ち上げて操作することが出来ないのか?

 

電子カルテで文書(診断書、医師意見書など)を作成するとき、過去の文書などの参照は不可欠!です

何方か良いツール知りませんか?

 

 

OkiToolでの楽々文書管理

文書管理のシステムは色々なメーカーが手掛けていますが、導入するのにちょっと敷居が高ったのでOkiToolで文書管理が出来るようにしました

文書管理といっても、文書をファイリングするだけで、難しいことはしていません

1)簡単にプレビューが参照できる

2)文書内の文字で検索が出来る

3)管理、登録が容易である

4)いろいろな文書が登録できる

などを考慮して作成しました

 

操作方法

1)対応ファイル

 基本的に何でも登録可能ですが、ビューアが対応していなければ参照できません

 対応中の拡張子は  xls  xlsx  doc  docx  ppt  jpg  pdf  txt  などです

2)登録方法:ドラッグ&ドロップ

 登録グループを決めて、一覧へドラッグ&ドロップで登録

 複数ファイルのドロップも可能

 データはバイナリーデータとしてDBへ登録

3)全文検索

 登録時、xdoc2txt2を使用してテキストを抽出し、テキストをDB登録

(先頭から2000文字 Oracleの制約)

 

f:id:syskobo:20180215134029j:plain

4)プレビュー
 リストの選択行をダブルクリックでプレビューを表示

 officeのプレビューにDsoframer.ocxを利用

 その他は.NET WebBrowserを利用

5)登録先にDBサーバー(DBMS)を使用すればOkiTool導入端末全てで参照検索可能

6)動作制約

 Dsoframer.ocxを使用しているアプリケーションと同時に起動しない事

 OkiTool文書管理で作業中、他でEXCELを起動しない事

dsoframer の商用利用?

Dsoframer.ocx とは?

Dsoframer.ocx は、Windowsオペレーティング システム用に Smartdraw, Llc が開発した DSOFRAMER 関連のOCX ファイルの一種です。Dsoframer.ocx の最新版は 1.3.1323.1 で、Windows 用に開発されました。

www.officeocx.com

対抗社のHPですが、バグが多くMSのサポートが無いため商用で使うべきでないとの内容ですが、自分も試す限りその通りと思います


しかしながら、電子カルテのMegaOakHR、インフォコムのMedi-Suportでは使用しています
そのため多くの制約に悩まされています

1)電子カルテのMegaOakHRでサマリ文書入力中、過去に書いたサマリ文書が参照できない(電子カルテ内部で重複起動ならない様に制約している)
2)インフォコムのMedi-UNITE(Medi-Support)(医療文書作成支援システム)のユーザー文書(エクセル)との電子カルテのMegaOakHRでサマリ文書入力の同時起動時Medi-UNITE(Medi-Support)がハングアップする
3)電子カルテのMegaOakHRでサマリ文書入力中、OkiToolの文書管理(OkiToolでもdsoframerをテスト利用)で文書をプレビューしたとき、電子カルテのMegaOakHRでサマリ文書がハングアップする

 

上記の事よりdsoframer.ocxは複数起動出来ないocxであり、商用で使うべきものではないと考えます

dsoframer.ocxの不具合を修正し、動作を担保して頂けたら問題は無いのですが・・・

 

そもそも、大手ベンダーが不具合があることが分かっている(根本的な対応でなく、制約していることで証明している)いるのにdsoframer.ocxを利用するのか、企業体質を疑うしかありません。

 

しかしながら、単体で使用するには便利なocxです

Edraw Office Viewer Componentも試しましたが64bitと32bitでの動作相違及び動作途中WORDが表示できないくなったりしました

色々な環境、使い方がある中でより良いチョイスを期待したいです

 

自己署名証明書(通称:オレオレ証明書)の証明書インストール

 自己署名証明書(通称:オレオレ証明書)の危険性を理解した上で使う、証明書インストールプログラムについて

 

qiita.com

 OkiToolはローカル設定のみでも利用可能ですが、複数の端末で利用するのはやはり、サーバーがあった方が良いです。

そのとき、証明書絡みで不便性を感じでいましたので、証明書インストールプログラムを作成しました。

証明書が必要なパターンは以下になります

 

1)ClickOnceでのインストール

「 信頼された発行元」の証明書が無いとき、以下のような警告が表示されます

ルート証明書」がインストールされていれば、手動で「 信頼された発行元」の証明書のインストールは可能ですが、知らない人には難しいようです。

f:id:syskobo:20180126093843j:plain

 

2)サーバとの通信(SSLでのSOAP

サーバとの通信は HTTPでも可能ですが、インターネットを通してサーバ接続を行いたい事があったのでSSLで通信する様しました。

ブラウザでの通信では、「危険性を理解して接続する」を選んで通信もできますが、プログラムからでは出来ませんでした。

そこで必要になるのがルート証明書になります。

ルート証明書をインストールすれば、SSLでのSOAP通信も可能になります。

「有料のSSL証明書」があれば、ルート証明書は不要です。

 

上記1)、2)を解決するために作ったのが以下です

f:id:syskobo:20180126095215j:plain

 

起動して「インストール」ボタンクリックでインストール完了です

証明書インストールを事前に配布できればユーザーの手を煩わせることが無くなります

 

「証明書」ボタンはインストール済みの証明書が確認できるようにしています

f:id:syskobo:20180126095316j:plain

 

ローカルコンピューターに証明書のインストールを行うときは、管理者として実行すればインストールできます

f:id:syskobo:20180126095330j:plain

 

 

WORDの差し込み印刷

OkiToolでWORDの差し込み印刷を行っています。

差し込み印刷のパターンは以下の3通り対応しています

1)1データをWORD1ページに印刷

2)複数データをWORD複数ページに一括印刷(WORDは1ファイル)

3)複数データをWORD1ページに印刷

テンプレートを作成し、置換して印刷する様にしていますが、ページサイズがテンプレートと同じにならない現象がずーとありましたが、ようやく原因が分かりました

C#でテンプレートを開いたとき、ヘッダー、フッターのサイズがWORD初期値になるようで、テンプレート上でヘッダー、フッターのサイズを設定すれば大丈夫になりました。

余白の設定、ヘッダー、フッターのサイズは別物なんですね

 

2)の「複数データをWORD複数ページに一括印刷」では空のDocumentに置換済みのテンプレートをInsertしていますが、この時の空のDocumentにテンプレートのページサイズを指定する様にしました

private void WordPageSetup(ref Word._Document tDocFrom, ref Word._Document tDocTo)
{
tDocTo.PageSetup.PaperSize = tDocFrom.PageSetup.PaperSize;
tDocTo.PageSetup.Orientation = tDocFrom.PageSetup.Orientation;
tDocTo.PageSetup.LayoutMode = tDocFrom.PageSetup.LayoutMode;
tDocTo.PageSetup.PageHeight = tDocFrom.PageSetup.PageHeight;
tDocTo.PageSetup.PageWidth = tDocFrom.PageSetup.PageWidth;
tDocTo.PageSetup.TopMargin = tDocFrom.PageSetup.TopMargin;
tDocTo.PageSetup.BottomMargin = tDocFrom.PageSetup.BottomMargin;
tDocTo.PageSetup.LeftMargin = tDocFrom.PageSetup.LeftMargin;
tDocTo.PageSetup.RightMargin = tDocFrom.PageSetup.RightMargin;
tDocTo.PageSetup.LinesPage = tDocFrom.PageSetup.LinesPage;

tDocTo.PageSetup.HeaderDistance = tDocFrom.PageSetup.HeaderDistance;
tDocTo.PageSetup.FooterDistance = tDocFrom.PageSetup.FooterDistance;
}

設定順番を間違いと、範囲外のエラーになる場合があるので注意が必要です

これで、テンプレートと同じ余白で印刷できるようになりました