C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ExcelのPageSetupプロパティ /k3user (17/12/05(Tue) 16:11) #85958
Re[1]: ExcelのPageSetupプロパティ /魔界の仮面弁士 (17/12/05(Tue) 18:40) #85964
  └ Re[2]: ExcelのPageSetupプロパティ /k3user (17/12/06(Wed) 08:16) #85966
    └ Re[3]: ExcelのPageSetupプロパティ /魔界の仮面弁士 (17/12/06(Wed) 11:12) #85968
      └ Re[4]: ExcelのPageSetupプロパティ /k3user (17/12/06(Wed) 15:06) #85973 解決済み


親記事 / ▼[ 85964 ]
■85958 / 親階層)  ExcelのPageSetupプロパティ
□投稿者/ k3user (16回)-(2017/12/05(Tue) 16:11:25)

分類:[.NET 全般] 

Excel出力をするプログラムをVB.Netで作成しているのですが、
PageSetupプロパティ設定時に「PageSetup クラスの Orientation プロパティを設定できません。(1004)」
のエラーが表示されてしまいます。マイクロソフトのページに
プリンタのドライバをインストールすれば問題が解決するとの情報が
あったので、ドライバをインストールしたのですが、解決に至っていません。
プログラムに問題があるのかそれともPCの設定に問題があるのか?
何か情報がありましたらご教示願います

Excelのバージョン                             Excel2016
Windowsのバージョン                           Windows Server2012(64Bit)
.NetFrameWorkのバージョン                     V4.6
ターゲットCPU                                 Any
Microsoft.Office.Interop.Excelのバージョン    14.0.0.0

Private Function testExcel

    Dim wvExcelApp As Object = Nothing
    Dim wvExcelBook As Object = Nothing
    Dim wvExcelSheet1 As Object = Nothing
    Dim wvExlData(,) As Object = Nothing
    Dim wvExcelExec As Boolean

    'Excel起動(非表示)
    wvExcelApp = CreateObject("Excel.Application")
    wvExcelApp.Visible = False
    wvExcelApp.DisplayAlerts = False
    wvExcelExec = True

    'ExcelBookを開く
    wvExcelBook = wvExcelApp.Workbooks.Open("C:\temp\test.xlsx")

    'Excel Sheetのセット
    wvExcelSheet1 = wvExcelBook.Worksheets("テスト一覧")

    With wvExcelSheet1
    'セルにデータを設定
    .Cells(1, 1) = "タイトル"
    .Range(.Cells(10, 10, .Cells(20, 20) = "テストデータ1"

        '紙を横置き
        .PageSetup.Orientation = 2

        '拡大縮小割合
        .PageSetup.Zoom = False
        .PageSetup.FitToPagesWide = 1
        .PageSetup.FitToPagesTall = False

        'ページの設定
        .PageSetup.CenterFooter = "&P / &N ページ"

        '余白調整
        .PageSetup.LeftMargin = wvExcelApp.CentimetersToPoints(1)
        .PageSetup.RightMargin = wvExcelApp.CentimetersToPoints(1)
        .PageSetup.TopMargin = wvExcelApp.CentimetersToPoints(1.5)
        .PageSetup.BottomMargin = wvExcelApp.CentimetersToPoints(1)
        .PageSetup.HeaderMargin = wvExcelApp.CentimetersToPoints(1.3)
        .PageSetup.FooterMargin = wvExcelApp.CentimetersToPoints(0.5)
    End With
            
    ' EXCELのプロセスが残る問題は一旦保留
    If wvExcelExec = True Then wvExcelApp.Quit()
    wvExcelSheet1 = Nothing
    wvExcelBook = Nothing
    wvExcelApp = Nothing

End Function

[ □ Tree ] 返信 編集キー/

▲[ 85958 ] / ▼[ 85966 ]
■85964 / 1階層)  Re[1]: ExcelのPageSetupプロパティ
□投稿者/ 魔界の仮面弁士 (1493回)-(2017/12/05(Tue) 18:40:50)
No85958 (k3user さん) に返信
> .Range(.Cells(10, 10, .Cells(20, 20) = "テストデータ1"

括弧の数が足りていませんし、このような呼び出し方は
COM オブジェクトの解放漏れに繋がるので、避けるべきかと…。
(.NET ではなく、VBS や VBA ならこのような呼び出しでも大丈夫なのですが)



> '紙を横置き
> .PageSetup.Orientation = 2

この部分で一時停止して、Excel 本体を Visible = True に戻し、
エクセルのメニューバーから、印刷設定で用紙方向の選択が
できるかどうかを確認してみてください。

別アカウントの権限で実行させている場合は、そのアカウントで
ログオンしなおしてから実行してみてください。セキュリティ上の
制限で、用紙設定の変更が拒否されている可能性もあるかもしれません。
[ 親 85958 / □ Tree ] 返信 編集キー/

▲[ 85964 ] / ▼[ 85968 ]
■85966 / 2階層)  Re[2]: ExcelのPageSetupプロパティ
□投稿者/ k3user (17回)-(2017/12/06(Wed) 08:16:11)
返信ありがとうございます。

>別アカウントの権限で実行させている場合は、そのアカウントで
>ログオンしなおしてから実行してみてください。セキュリティ上の
>制限で、用紙設定の変更が拒否されている可能性もあるかもしれません。

ご指摘の上記の可能性があるので(IIS_IUSRで動かしています。)
権限周りの調査をしてみます。


[ 親 85958 / □ Tree ] 返信 編集キー/

▲[ 85966 ] / ▼[ 85973 ]
■85968 / 3階層)  Re[3]: ExcelのPageSetupプロパティ
□投稿者/ 魔界の仮面弁士 (1494回)-(2017/12/06(Wed) 11:12:11)
No85966 (k3user さん) に返信
> ご指摘の上記の可能性があるので(IIS_IUSRで動かしています。)

実行環境が Server だったので、サービス起動というのは
予想していたのですが、IIS_IUSR という点が曖昧ですね。

IIS_IUSR というのは
IIS_IUSRS (S-1-5-32-568)のことでしょうか。
それとも IUSR (S-1-5-17)のことでしょうか。


なお、Office は非対話モードでの動作をサポートしていません。
また、ダウンロードするクライアント台数分の Excel ライセンスも必要です。
(クライアントすべてが Excel を導入済みなら追加購入は不要ですが)
https://support.microsoft.com/ja-jp/help/257757/

# ご存知かとは思いますが、一応テンプレート回答ということで。


サービス上で稼動させるのであれば、個人的には ClosedXml や EPPlus といった
別のライブラリの利用を個人的にはお奨めしています。
Excel のライセンスも不要ですし、COM 解放の手間も要らないので。
(これらは印刷は行えませんが、Excel 文書ファイルに対する印刷設定は行えます)


あと、ASP.NET で Excel ファイルをダウンロードさせるのであれば、
このあたりもご注意ください。
https://support.microsoft.com/ja-jp/help/318756/


> 権限周りの調査をしてみます。

CreateObject が成功しているようなので、、
Excel の起動許可は付与されているようですね。


プリンター系の設定については、
 HKEY_USERS\(該当アカウントのSID)\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts
 HKEY_USERS\(該当アカウントのSID)\Printers
あたりですが、これとは別に、該当アカウントに対する
 %USERPROFILE%\AppData\Local\Temp
が存在し、書き込み可能になっているかも重要です。
https://support.microsoft.com/ja-jp/help/419321


あるいは偽装とか。
https://support.microsoft.com/ja-jp/help/306158/
http://bit.ly/2AZWl0h
[ 親 85958 / □ Tree ] 返信 編集キー/

▲[ 85968 ] / 返信無し
■85973 / 4階層)  Re[4]: ExcelのPageSetupプロパティ
□投稿者/ k3user (19回)-(2017/12/06(Wed) 15:06:33)
魔界の仮面弁士さん

返信ありがとうございます。

下記URLの手順を実行した所、PageSetUpのプロパティ設定で
エラーとならずExcelを出力することが出来ました。
>https://support.microsoft.com/ja-jp/help/419321

以下のフォルダは存在していませんでしたが、動作はしました。
>これとは別に、該当アカウントに対する
>%USERPROFILE%\AppData\Local\Temp
>が存在し、書き込み可能になっているかも重要です。


>サービス上で稼動させるのであれば、個人的には ClosedXml や EPPlus といった
>別のライブラリの利用を個人的にはお奨めしています。
>Excel のライセンスも不要ですし、COM 解放の手間も要らないので。
>(これらは印刷は行えませんが、Excel 文書ファイルに対する印刷設定は行えます)

今回は、作業自体が終盤に差し掛かっているので、新しい技術を
導入することはできなかったのですが、今後参考にさせていただきます。


この度はありがとうございました。
解決済み
[ 親 85958 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -