• ベストアンサー

サーバーにインストールできない環境でActiveXを使う方法

初めて投稿します。よろしくお願いします。 現在ASP.NET2008(C#)で開発しています。 開発環境はLocalだったのですが、最終的にお客様に納品するときには、Windows系のレンタルサーバー(ActiveWeb)に移管する予定です。 現在開発のマシンや、客先のマシンにはOfiiceがインストールされているのですが、レンタルサーバーにはOfficeがインストールされておらず、したがって、MicrosoftのObject.Libraryが入っていません。 お客様の要望でどうしてもエクセル出力等が必要なのですが、サーバーにAxtiveXが入っていない環境で、エクセルを出力することは可能なのでしょうか。 クライアントは不特定多数ではないので、クライアントマシンにOfficeがある、という前提でもかまいません。 方法があればご教授いただければと思います。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

解決策としては#1の方の回答のようにバ「イナリを作る方法で1から やり直す。」というのもあるし、他の解決策もあるかも知れません。 Excelを作る元ネタは何なんでしょう? 仮にテキスト形式ならクライアントに情報を送り、そちらのScriptを 使って、テキスト→Excelという方法をとることもできます。 形態がWebアプリケーションなら、ブラウザのセキュリティレベルを 下げることで、ActiveXObjectを生成することが可能です。Excelへの 操作は現在、サーバ側で行っている操作と殆ど同じです。元ネタの 受け取り方が変わってきますが・・・ クライアントサイドScriptに詳しい技術者が居れば何とかなるかも 知れません。

fine_miki
質問者

補足

ありがとうございます。 エクセルはオブジェクトを生成するのではなく、サーバー上にあるエクセルテンプレート(*.xlt)を開いて編集する形式のものです。 クライアントでActiveXObjectを生成することができるんですね。 JavaScriptなどでおこなうことができるのでしょうか。 現在参照設定は、WebConfigに記述されていますが、同じところで、ActiveXObjectを生成できれば、サーバーサイドのコードを変えなくてもいけますよね。 ちょっと調べてみます。 ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

>JavaScriptなどでおこなうことができるのでしょうか。 できます。 >エクセルテンプレート(*.xlt)を開いて編集する形式のものです クライアント個別にインストールしておく必要があると思います。 >現在参照設定は、WebConfigに記述されていますが・・・ サーバ側とクライアント側は環境が違います。クライアント側に Excelがインストールされていれば、参照設定(JavaScriptでは?)は どうでも良いです。 >サーバーサイドのコードを変えなくてもいけますよね C#とJavaScriptのギャップがあるので、全く同じコードというのは ちょっと無理でしょうが、その変更だけで大丈夫でしょう。

fine_miki
質問者

お礼

ありがとうございました。Javascriptでコードを記述して、なんとか実装できました。 Ajaxをつかわないと、ページングをつけたグリッドの全値が取れないのが痛かったです。 一応、サンプルにコード、書いておきます。 var app; var wb; var ws; function ExcelAppOpen (sheet){ // Excelの起動 app = new ActiveXObject("Excel.Application"); try{ var str = "http://xxxx/xlt/帳票出力.xlt"; app.DisplayAlerts = false; app.Workbooks.Open(str, 0, true); }catch(e){ // エラー出力 window.alert("エクセルを開くことができません。"); } wb = app.Workbooks(1); ws = wb.WorkSheets(sheet); GetItems(); app.Visible = true; app.quit(); ws = null; wb = null; app = null; } function GetItems(){ ws.Cells(2,3).Value = document.getElementById("ctl00$ContentPlaceHolder1$xxx").value; }

fine_miki
質問者

補足

お返事が遅くなりました。 ありがとうございます。 そうですか、やっぱりActiveXをインクルード(参照を持ったままDLLごと)サーバーにあげるのは難しいようですね。 JavaScriptのサンプルコードも見つけましたので、やってみようと思います。 C#のコードからJavaScriptのコードに直さなければいけないですね。 >>エクセルテンプレート(*.xlt)を開いて編集する形式のものです >クライアント個別にインストールしておく必要があると思います。 これについてはLocalHost環境で、レンタルサーバーの仮想ディレクトリからダウンロードして使用することができています。 (ex: wb = app.Workbooks._Open("http://www.xxx/xlt/帳票出力.xlt",・・・;) クライアントサイドでは、どちらにソースがあってもかわらにはずですよね? もうちょっといろいろ試してみて、うまくいったらご報告いたします。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

MS KB: Office のサーバーサイド オートメーションについて http://support.microsoft.com/kb/257757/ja Excelファイルの出力は,可能不可能の話であれば可能です。 非ISO標準ではあるものの,ECMA 376の1st editionは公開されていますし,バイナリのフォーマットも公開されています。 # ISO/IEC 29500:2008 (ECMA 376 2nd edition) 対応はOffice 2010とされていますので。 ただし,この方法はオートメーションとは完全に異なるので,一から作り直しになります。 オートメーションで,という話であれば,不可能になります。 オートメーションというのは,あくまでアプリケーションを外部から操作することだからです。

fine_miki
質問者

補足

ありがとうございます。バイナリ、ですか。 JAVAとかでWindowsじゃないサーバーにあげるのと同じ感じですよね。 MSのObject.Libraryは、レンタルサーバーの割り当てられたどこかにおいておいて使えるものではないですよね。 サーバー側でレジストリに登録してもらわないといけないんでしょうね。 参照設定されたDLLごと、どこかにアップロードできる方法はないでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A