@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

【ASP.NET】Excelの印刷ができない

1
投稿者投稿内容
ringosan
常連さん
会議室デビュー日: 2002/12/13
投稿数: 43
投稿日時: 2003-02-12 13:41
いつも勉強させてもらっています。
Webアプリケーションで、Excelを呼び出し編集して、保存は問題ないのですが、
Excel印刷のPrintOutメソッドでエラーになり印刷ができません。

エラーの内容は
「プリンタが組み込まれていません。スタートメニューから[設定][プリンタ]を選択し、
[プリンタの追加]をダブルクリックして、プリンタを組み込んでください。後は、ウィザードの
手順に従ってください。」というものです。
明らかに使用可能なプリンタはあるのですが、このようなエラーになります。

何か設定等が必要なのでしょうか?教えてください。よろしくお願いします。
ringosan
常連さん
会議室デビュー日: 2002/12/13
投稿数: 43
投稿日時: 2003-02-13 11:34
調査報告※未解決です。
Excelからの印刷ではなく、PrintDocumentを使って印刷を試してみたところ、
「RPC サーバーを利用できません。 」というエラーが返ってきました。
マイクロソフト サポート技術情報 - 224371 では、IIS 5.0 エラー ということで
回避策にあるようにIISADMIN サービスを開始したのですが、
プリンタを見つけられないという状況は変わっていません。
・・・もう少し、調べてみようと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-13 11:44
※ご参考※

 WindowsXPで、ネットワークプリンタを利用している場合、ユーザを変更するとプリンタはなくなります。Windows2000でも、同じと思います。

 ASP.NETのサーバサイドプロセスは、ASPNETというユーザで実行されています。このため、他のユーザでネットワークプリンタの設定をしても、その設定はASPNETには引き渡されず、「プリンタがない」といわれると思います。

 エクセルをクライアントサイドプロセスで作成(起動はできませんが、CreateObjectは可能)すれば、クライアントでログインしているユーザが設定しているプリンタが使えると思います。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-02-13 11:45 ]
ringosan
常連さん
会議室デビュー日: 2002/12/13
投稿数: 43
投稿日時: 2003-02-13 12:41
Jittaさん、どうもありがとうございます。

>WindowsXPで、ネットワークプリンタを利用している場合、ユーザを変更すると
>プリンタはなくなります。Windows2000でも、同じと思います。
おっしゃるとおりWindows2000です。
ちなみにSP2です。

わからないことがあります。
> ASP.NETのサーバサイドプロセスは、ASPNETというユーザで実行されています。
>このため、他のユーザでネットワークプリンタの設定をしても、その設定はASPNETには
>引き渡されず、「プリンタがない」といわれると思います。
ということはASPNETユーザーを作って、権限を与えればいいのでしょうか?
ASPNETにプリンタの設定を渡せるかどうかわからないのですが、
プリンタのセキュリティでEveryoneユーザーの印刷は許可になっています。
ぜんぜん関係なかったらすいません。。。


>エクセルをクライアントサイドプロセスで作成(起動はできませんが、CreateObjectは可能)
現在、IISも自分のマシン(localhost)で実行しています。
「クライアントサイドプロセスで作成」というのはどうやって作成するのでしょうか?
的はずれなことかも知れませんが、WebサービスではなくWebアプリケーションで作成する
ということであればWebサービスは使用していません。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-13 16:24
>>ということはASPNETユーザーを作って、権限を与えればいいのでしょうか?
>>ASPNETにプリンタの設定を渡せるかどうかわからないのですが、
>>プリンタのセキュリティでEveryoneユーザーの印刷は許可になっています。
>>ぜんぜん関係なかったらすいません。。。

 手っ取り早く試すには、…の前に、おっしゃっている「使用可能なプリンタ」はネットワークプリンタですね。新しいユーザ(ASPNET以外)を作成し、その新しいユーザでログインして、コントロールパネルのプリンタを見てください。おそらく、何もないはず。
 ユーザASPNETは、.NET FrameworkかVS.NETをインストールすると作成されています。このユーザのパスワードはわかりません。つまり、ネットワークプリンタは使えない、ということですね!
 これでは困りますよね。で、ネットワークのプリンタを、あたかもローカルプリンタであるかのように使います。方法は、Administrator権限のあるユーザでログインします。
・プリンタの追加ウイザードを起動します。
・「ネットワーク」ではなく、「ローカル」を選択し、「プラグアンドプレイ」のチェックを外します。
・ポートの選択で「新しいポート」、「Standard TCP/IP ポート」を選択します。
・・・・すみません、後は試せないので、ご自分で設定してください。プリンタのIPアドレスが必要です。ネットワーク対応プリンタならばこれでOKですが、他のコンピュータのローカルプリンタになっているプリンタがこの方法で接続できるかどうかは、わかりません。

 こうやって「ローカルポート」に接続した「ネットワークプリンタ」は、そのコンピュータの全ユーザが使用可能になる(XPではそうなっている)ので、これでおそらくASPNETユーザもプリンタが見えるようになっていると思います。「思う」のは、もしかすると「デフォルトプリンタ」に設定しなければいけないかもしれない、ということです。「デフォルトプリンタ」にしなければいけないなら、これでもダメ、ということになってしまいます。


>>「クライアントサイドプロセスで作成」というのはどうやって
>>作成するのでしょうか?
>>的はずれなことかも知れませんが、Webサービスではなく
>>Webアプリケーションで作成するということであれば
>>Webサービスは使用していません。

 ん〜、Webアプリケーションのプロジェクトディレクトリをご覧ください。.asmxというファイルと、.asmx.vb(.asmx.cs)というファイルがありますよね。また、VS.NETのデザインモードで貼り付けたコントロールには「[|>]」三角マークが付いていますよね。HTMLを表示させると、「run="Server"」と書いてあると思います。Run at Serverとマークされたコントロールは、サーバサイドで動作します。また、.asmx.vb(.asmx.cs)ファイルに記述した内容も、サーバサイドで動作します。対して、.asmxファイルに、JScript(JavaScript, VBScript)で記述した内容は、クライアントサイドで動作します。
 という説明で、ご理解頂けるでしょうか?
ringosan
常連さん
会議室デビュー日: 2002/12/13
投稿数: 43
投稿日時: 2003-02-14 12:48
返答がおそくなりました。
Jittaさん丁寧な説明どうもありがとうございました。
結果報告ですが、
>ネットワークのプリンタを、あたかもローカルプリンタであるかのように使います。

ネットワークプリンタ(IPアドレス無し)を使っていたので、IPアドレスのあるプリンタを
教えてもらった様に試してみましたが、ASPNETで実行中にプリンタを見ることはできませ
んでした。
結局、ローカルに直接つないでみたところすんなり動きました。
今回はテストで自分のマシンで実行していたのですが、運用時はプリンタはサーバーに直接
つながるようなので、大丈夫みたいです。
話が少しそれるのですが、
プリンタを使う前に、PrintDocumentを作成しPrinterSettings.PrinterNameをセットして、PrinterSettings.IsValidでは有効になっているのですが、これはAdministratorユーザー
が見れているだけなのでしょうか?印刷はできないのになぜ有効になるのかが不思議です。

>Run at Serverとマークされたコントロールは、サーバサイドで動作します。
>また、.asmx.vb(.asmx.cs)ファイルに記述した内容も、サーバサイドで動作します。
>対して、.asmxファイルに、JScript(JavaScript, VBScript)で記述した内容は、
>クライアントサイドで動作します。
> という説明で、ご理解頂けるでしょうか?
ご丁寧な説明どうもありがとうございます。
.asmx.vb(.asmx.cs) は私のは.aspx.vb(.aspx.cs)ですが。
サーバーサイド、クライアントサイドの違い理解できました。
サーバーコントロールのボタンクリックや、JavaSCRIPT等の記述を.aspx.csの中に記述して
それをRegisterStartupScriptで実行するのはサーバーサイド処理なんですね。
あやふやだったものがわかり、とても勉強になりました。
これからもお世話になると思いますが、どうぞよろしくおねがいします。




1

スキルアップ/キャリアアップ(JOB@IT)