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

EXCELのPageBreakが取得できない

1
投稿者投稿内容
またきち
会議室デビュー日: 2003/11/07
投稿数: 8
投稿日時: 2003-11-07 17:28
はじめまして。

現在、ASP.NET(C#)にて
EXCELファイルを開いて画像を生成する
プログラムを作っています。

サーバー環境:
Win2000Server
Office2000
VS.NET2003


その中で範囲を指定する為にPageBreakを見ようとしているのですが
そこで下記のようなエラーが発生してしまいます。

エラー内容:
Message:Range クラスの PageBreak プロパティを取得できません。
StackTrace:
[ at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Excel.Range.get_PageBreak()

組み込んでいるロジック(抜粋):
==========================================
int ret = Int16.MaxValue;
for(int i = checkStartRow; i < Int16.MaxValue; i++)
{
    if(worksheet.get_Range(worksheet.Cells[i,1],worksheet.Cells[i,1]).Rows.PageBreak == (int)Excel.XlPageBreak.xlPageBreakAutomatic)
↑↑↑↑この行でエラーになります
    {
        ret = i;
        break;
    }
}

==================================================

ちなみに同様のモジュールを
OSがWinXP Proの環境にのせて実行したり、
WindowsApplicationに組み込んで
サーバーのローカルで実行する分には問題なく動きます。

プリンタの設定等も
WinXP環境で動いているのと同様にしているのですが
エラーになる原因がわかりません。

ご存知の方、どうかご教授よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-07 17:58
直接の回答ではないかもしれませんが。

 EXCELの「ページ範囲」は、プリンタとプリンタドライバに依存します。これはMSのページにも書いてあることです。つまり、EXCELやWORDは、印刷するためのページ範囲を計算するため、現在使用可能なプリンタから、そのプリンタが印字可能な範囲などの情報を取得します。
(フレーズ「余裕を持って」で検索)
http://support.microsoft.com/default.aspx?scid=kb;ja;416697
http://support.microsoft.com/default.aspx?scid=kb;ja;400271

 ところが、.NET Frameworkでは、セキュリティ設定で印刷が制限されています。例えば、あるサイトを見たところ、急に広告が印刷されたら困りますよね。そういうものを防ぐ目的です。ASP.NETのサーバサイドで動いているワーカプロセスも、その制限を受けます。そのためにプリンタにアクセスできない、と考えられます。


 また、せっかく計算しても、違うコンピュータで、違うプリンタを使えば、設定がかえってあだになることもあります。MSサイトにあるWORD文書をダウンロードしてみると、たまにフッターが次ページにはみ出しているものがありませんか?私は古いプリンタを使っているのでしょっちゅうあるのです。
#自分で「余裕を持って改ページ処理を」と言っていながら、
#それに沿っていないとはどういうことだ。
1

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