グッドデザイン賞を受賞したウォーターサーバー >>

初めて投稿します。よろしくお願いします。

現在ASP.NET2008(C#)で開発しています。
開発環境はLocalだったのですが、最終的にお客様に納品するときには、Windows系のレンタルサーバー(ActiveWeb)に移管する予定です。

現在開発のマシンや、客先のマシンにはOfiiceがインストールされているのですが、レンタルサーバーにはOfficeがインストールされておらず、したがって、MicrosoftのObject.Libraryが入っていません。

お客様の要望でどうしてもエクセル出力等が必要なのですが、サーバーにAxtiveXが入っていない環境で、エクセルを出力することは可能なのでしょうか。

クライアントは不特定多数ではないので、クライアントマシンにOfficeがある、という前提でもかまいません。

方法があればご教授いただければと思います。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

解決策としては#1の方の回答のようにバ「イナリを作る方法で1から


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

この回答への補足

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

補足日時:2009/06/30 14:53
    • good
    • 0

>JavaScriptなどでおこなうことができるのでしょうか。


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

この回答への補足

お返事が遅くなりました。
ありがとうございます。
そうですか、やっぱりActiveXをインクルード(参照を持ったままDLLごと)サーバーにあげるのは難しいようですね。
JavaScriptのサンプルコードも見つけましたので、やってみようと思います。
C#のコードからJavaScriptのコードに直さなければいけないですね。

>>エクセルテンプレート(*.xlt)を開いて編集する形式のものです
>クライアント個別にインストールしておく必要があると思います。

これについてはLocalHost環境で、レンタルサーバーの仮想ディレクトリからダウンロードして使用することができています。
(ex: wb = app.Workbooks._Open("http://www.xxx/xlt/帳票出力.xlt",・・・;)
クライアントサイドでは、どちらにソースがあってもかわらにはずですよね?
もうちょっといろいろ試してみて、うまくいったらご報告いたします。
ありがとうございました。

補足日時:2009/06/30 21:48
    • good
    • 0
この回答へのお礼

ありがとうございました。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;
}

お礼日時:2009/07/06 20:19

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とされていますので。

ただし,この方法はオートメーションとは完全に異なるので,一から作り直しになります。
オートメーションで,という話であれば,不可能になります。
オートメーションというのは,あくまでアプリケーションを外部から操作することだからです。

この回答への補足

ありがとうございます。バイナリ、ですか。
JAVAとかでWindowsじゃないサーバーにあげるのと同じ感じですよね。

MSのObject.Libraryは、レンタルサーバーの割り当てられたどこかにおいておいて使えるものではないですよね。
サーバー側でレジストリに登録してもらわないといけないんでしょうね。

参照設定されたDLLごと、どこかにアップロードできる方法はないでしょうか。

補足日時:2009/06/30 14:44
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング