none
Excel印刷範囲を取得したい RRS feed

  • 質問

  • c#やvbから遅延バインドしたExcelアプリケーションのPrintArea(「ActiveSheet.PageSetup.PrintArea」)の値を取得すると、実際の値の取得ができず、長さ0の文字列を取得してしまいます。

    Excelシートに埋め込んだVBマクロで同様のコードは問題なく取得可能であることは確認しました。

    Excelシートの印刷範囲が分かれば、PrintAreaに固執するつもりもないので代替方法、または回避策をご存じの方、ご教授、お知恵拝借お願いいたします。

    (1)確認したこと:

     VBにて遅延バインドしたExcelを画面表示し、ActiveSheetのPrintAreaを取得したが、長さ0の文字列だった。事前にExcel上からExcelファイルのPrintAreaに対して設定を行っている。

    (2)やりたいこと:

     VBまたはC#からActiveSheetの印刷範囲を取得したい。

    (3)OS:

     XP Professional Version 2002 SP2

    (4)製品:

     Visual Studio2005 Professional Edision

     MS Office Excel 2003 SP2

    2007年1月9日 1:31

回答

  • 素早いお返事ありがとうございます。

     じゃんぬねっと さんからの引用

    Office PIA からでも、マクロと同じような手法で普通に取得できるハズです。

     PIAも考慮したのですが、Excelのどのバージョンでも動作したいために今回は見送りました。

     じゃんぬねっと さんからの引用

    個人的には、Excel.Application インターフェイスの Run メソッドからマクロを実行し、戻り値として印刷範囲を返す手法をお勧めします。

    マクロ埋め込みも1つの手ですが、コードが方々に分散すると、保守の面で大変になるのでさけたいところです。でも、アイディアはありがとうございます。

    実はさらに試行錯誤してみました。ExcelファイルをExcelで開いて印刷範囲の設定を再度行うと、VSから読めるようになることを発見しました。つまり、印刷範囲の設定は2度行えばVSから読めるのです。(^^; これで解決しました。

    いろいろご協力ありがとうございました。

    2007年1月9日 6:21

すべての返信

  • あっぷらいと さん、こんにちは。

     あっぷらいと さんからの引用
    c#やvbから遅延バインドしたExcelアプリケーションのPrintArea(「ActiveSheet.PageSetup.PrintArea」)の値を取得すると、実際の値の取得ができず、長さ0の文字列を取得してしまいます。
    Excelシートに埋め込んだVBマクロで同様のコードは問題なく取得可能であることは確認しました。

    Office PIA からでも、マクロと同じような手法で普通に取得できるハズです。
    よろしければ、コードの方を提示してみてください。

    個人的には、Excel.Application インターフェイスの Run メソッドからマクロを実行し、戻り値として印刷範囲を返す手法をお勧めします。
    戻り値は、System.Object 型になってしまいますが、こちらの方が COM の参照カウントを考える必要が少なくなるので、遥かに安全です。

    マクロであれば、可能と書かれていますので一応こういう方法もあるということで、お勧めしました。

    2007年1月9日 1:38
  • 素早いお返事ありがとうございます。

     じゃんぬねっと さんからの引用

    Office PIA からでも、マクロと同じような手法で普通に取得できるハズです。

     PIAも考慮したのですが、Excelのどのバージョンでも動作したいために今回は見送りました。

     じゃんぬねっと さんからの引用

    個人的には、Excel.Application インターフェイスの Run メソッドからマクロを実行し、戻り値として印刷範囲を返す手法をお勧めします。

    マクロ埋め込みも1つの手ですが、コードが方々に分散すると、保守の面で大変になるのでさけたいところです。でも、アイディアはありがとうございます。

    実はさらに試行錯誤してみました。ExcelファイルをExcelで開いて印刷範囲の設定を再度行うと、VSから読めるようになることを発見しました。つまり、印刷範囲の設定は2度行えばVSから読めるのです。(^^; これで解決しました。

    いろいろご協力ありがとうございました。

    2007年1月9日 6:21
  •  あっぷらいと さんからの引用
    PIAも考慮したのですが、Excelのどのバージョンでも動作したいために今回は見送りました。

    Office PIA でもない、

    マクロ埋め込みも1つの手ですが

    VBA マクロでもない、

    とすれば、何をお使いになって実装しているのでしょう?

    最初の方の書き込みを見ると、

    VBにて遅延バインドしたExcelを画面表示し

    と書いてありますが...

    レイトバインドによるExcel操作 (atmarkit.co.jp)

    こちらのスレッドを見ておいてください。

    コードが方々に分散すると、保守の面で大変になるのでさけたいところです。でも、アイディアはありがとうございます。

    そうでしょうか?
    私は、むしろこちらの方が保守性が良いと思っています。

    マクロに書きたくないのであれば、スクリプトを .NET 側のソースに埋め込んで流してしまっても良いでしょう。

    2007年1月9日 7:02