
初めて投稿します。よろしくお願いします。
現在ASP.NET2008(C#)で開発しています。
開発環境はLocalだったのですが、最終的にお客様に納品するときには、Windows系のレンタルサーバー(ActiveWeb)に移管する予定です。
現在開発のマシンや、客先のマシンにはOfiiceがインストールされているのですが、レンタルサーバーにはOfficeがインストールされておらず、したがって、MicrosoftのObject.Libraryが入っていません。
お客様の要望でどうしてもエクセル出力等が必要なのですが、サーバーにAxtiveXが入っていない環境で、エクセルを出力することは可能なのでしょうか。
クライアントは不特定多数ではないので、クライアントマシンにOfficeがある、という前提でもかまいません。
方法があればご教授いただければと思います。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
解決策としては#1の方の回答のようにバ「イナリを作る方法で1から
やり直す。」というのもあるし、他の解決策もあるかも知れません。
Excelを作る元ネタは何なんでしょう?
仮にテキスト形式ならクライアントに情報を送り、そちらのScriptを
使って、テキスト→Excelという方法をとることもできます。
形態がWebアプリケーションなら、ブラウザのセキュリティレベルを
下げることで、ActiveXObjectを生成することが可能です。Excelへの
操作は現在、サーバ側で行っている操作と殆ど同じです。元ネタの
受け取り方が変わってきますが・・・
クライアントサイドScriptに詳しい技術者が居れば何とかなるかも
知れません。
この回答への補足
ありがとうございます。
エクセルはオブジェクトを生成するのではなく、サーバー上にあるエクセルテンプレート(*.xlt)を開いて編集する形式のものです。
クライアントでActiveXObjectを生成することができるんですね。
JavaScriptなどでおこなうことができるのでしょうか。
現在参照設定は、WebConfigに記述されていますが、同じところで、ActiveXObjectを生成できれば、サーバーサイドのコードを変えなくてもいけますよね。
ちょっと調べてみます。
ありがとうございます。
No.3
- 回答日時:
>JavaScriptなどでおこなうことができるのでしょうか。
できます。
>エクセルテンプレート(*.xlt)を開いて編集する形式のものです
クライアント個別にインストールしておく必要があると思います。
>現在参照設定は、WebConfigに記述されていますが・・・
サーバ側とクライアント側は環境が違います。クライアント側に
Excelがインストールされていれば、参照設定(JavaScriptでは?)は
どうでも良いです。
>サーバーサイドのコードを変えなくてもいけますよね
C#とJavaScriptのギャップがあるので、全く同じコードというのは
ちょっと無理でしょうが、その変更だけで大丈夫でしょう。
この回答への補足
お返事が遅くなりました。
ありがとうございます。
そうですか、やっぱりActiveXをインクルード(参照を持ったままDLLごと)サーバーにあげるのは難しいようですね。
JavaScriptのサンプルコードも見つけましたので、やってみようと思います。
C#のコードからJavaScriptのコードに直さなければいけないですね。
>>エクセルテンプレート(*.xlt)を開いて編集する形式のものです
>クライアント個別にインストールしておく必要があると思います。
これについてはLocalHost環境で、レンタルサーバーの仮想ディレクトリからダウンロードして使用することができています。
(ex: wb = app.Workbooks._Open("http://www.xxx/xlt/帳票出力.xlt",・・・;)
クライアントサイドでは、どちらにソースがあってもかわらにはずですよね?
もうちょっといろいろ試してみて、うまくいったらご報告いたします。
ありがとうございました。
ありがとうございました。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;
}
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とされていますので。
ただし,この方法はオートメーションとは完全に異なるので,一から作り直しになります。
オートメーションで,という話であれば,不可能になります。
オートメーションというのは,あくまでアプリケーションを外部から操作することだからです。
この回答への補足
ありがとうございます。バイナリ、ですか。
JAVAとかでWindowsじゃないサーバーにあげるのと同じ感じですよね。
MSのObject.Libraryは、レンタルサーバーの割り当てられたどこかにおいておいて使えるものではないですよね。
サーバー側でレジストリに登録してもらわないといけないんでしょうね。
参照設定されたDLLごと、どこかにアップロードできる方法はないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6をWindows10にインストール...
-
VBAでArrayListを使う為の「msc...
-
VB.NET(2017)で インストーラを...
-
6.0から2005へのアップグレード
-
VB6(SP5)+OO4OでCreateObjectが...
-
Visual Studio 6.0 の過去の Se...
-
VB6で作成したアプリを配布する...
-
[VB.net] ExcelへのQRコード出...
-
次のクラスは登録されていませ...
-
OLEPRO32.DLLが見つかりません
-
accessがインストールされてい...
-
VB.NET で作られたソフト...
-
Visual C++がたくさんある
-
Designer.vbは直接コードをいじ...
-
印刷要求順番と印刷出力順番が...
-
C#ソースをCSCファイルにてコン...
-
VBAで印刷スプール終了の判定を...
-
ManagementClassが見つからない。
-
クリレポのプリンタ設定について
-
意味不明の実行時エラーで困っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでArrayListを使う為の「msc...
-
[VB.net] ExcelへのQRコード出...
-
VB6(SP5)+OO4OでCreateObjectが...
-
VB.NETでSPREADの設定方法
-
VB6で作成したアプリを配布する...
-
う~ん…。
-
Product Codeの変更法は?
-
ビルドした.exeファイルは.NE...
-
発行元:不明???
-
次のクラスは登録されていませ...
-
VB6のアプリケーションの配布
-
Excelがインストールされてない...
-
VB.NET で作られたソフト...
-
VB.NET(2017)で インストーラを...
-
VB6.0で作成したexeファイルが...
-
Flash Builder 4.7 デザインモード
-
visual studio 2015 のインスト...
-
JWCADwでRubyは必要...
-
.NETの標準ライブラリでExcelフ...
-
VB4.0にて作成したソフトの配布
おすすめ情報