Curl Global Community

Full Version: ActiveXObjectへのパラメータの渡し方
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Excelのメソッドを呼び出したいのですが、やり方がうまくわかりません。
Excelのドキュメントを読むと全ての引数がオプションと定義されており、
名前付きで引数にセットしなければならないんですが、
CurlからActiveXObjectのmethodに引数を渡す時は
位置引数ですよね?
特定の引数に値を設定したくない場合、どうしたらいいんでしょうか。
具体的には、ExcelBookのExportAsFixedFormatメソッドを呼びたいです。
これの引数は、以下の通りです。
Type
Filename
Quality
IncludeDocProperties
IgnorePrintAreas
From
To
OpenAfterPublish
FixedFormatExtClassPtr
これのうち、From,Toには何も設定せずに、 OpenAfterPublishにtrueを設定したいです。
ためしに、null,null,trueとしてみましたが、nullを渡したらエラーになりました。。
どうすればいいんでしょうか?やりたいことが上手く伝わるといいんですが。。
学習を兼ねて調べてみたのですが、省略する引数に null ではなく、skip-optional-arg 定数を
指定すればよさそうな感じです。

Curl IDEドキュメントの「ActiveX コントロール」の「Curl のデータ型と ActiveX コントロール」の項に
ActiveX の型と Curl のデータ型の対比表があったのですが、表の最後に下記の記述がありました

 "<引数が省略されている場合>  SkipOptionalArg"

ドキュメント内を検索したところ CURL.GRAPHICS.ACTIVEX に skip-optional-arg 定数 が用意されていており、
下記のような説明がありましたので、お探し物はこれかと思います。
Quote:skip-optional-arg 定数

public constant skip-optional-arg:SkipOptionalArg = {SkipOptionalArg 0}

パッケージ: CURL.GRAPHICS.ACTIVEX

指定されていないオプショナルの引数のためのプレース フォルダーとして使用してください。

Curl developer Centerに掲載されていた、ActiveXを使用したExcelデータの操作のサンプルの一部を
抜粋して、 ExportAsFixedFormat メソッドを呼んでみましたが、PDF保存後にビュワーが起動しました。

(※手を抜いてExcelブックを保存していないので終了時に保存確認のダイアログがでますが、そこは気にしない方向で・・・)
Code:
{curl 8.0 applet}{curl-file-attributes character-encoding = "shift-jis"}{applet manifest = "manifest.mcurl",    {compiler-directives         careful? = true,         allow-any-calls? = true    }}
{import * from CURL.GRAPHICS.ACTIVEX}

||データをExcelに登録してPDFファイルに出力するプロシージャ
{define-proc {save-as-pdf pdf-file-name:String}:void
    def obj-Excel =
        {ActiveXObject
            ProgId = "Excel.Application"
        }
    
    {obj-Excel.Workbooks.Add}
    set {obj-Excel.Range "A1","B3"}.Borders.LineStyle = 1
    set {obj-Excel.Cells 1,1}.Value = "A1"
    set {obj-Excel.Cells 1,2}.Value = "B1"
    set {obj-Excel.Cells 2,1}.Value = "A2"
    set {obj-Excel.Cells 2,2}.Value = "B2"
    set {obj-Excel.Cells 3,1}.Value = "A3"
    set {obj-Excel.Cells 3,2}.Value = "B3"
    
    
    def xlTypePDF = 0
    def xlQualityStandard = 0
    
    {obj-Excel.ActiveWorkbook.ExportAsFixedFormat
        xlTypePDF,
        pdf-file-name,
        xlQualityStandard,
        true,
        false,
        skip-optional-arg,
        skip-optional-arg,
        true,
        skip-optional-arg
    }
    
    {obj-Excel.ActiveWorkbook.Close}
    {obj-Excel.Quit}
    {obj-Excel.destroy-object}
    {until obj-Excel.object-destroyed? do
        {popup-message "未解放の為、再度解放処理を行います。"}
        {obj-Excel.destroy-object}
    }
    
    {popup-message "保存しました"}
}


||押すと上のsave-as-pdfプロシージャを呼び出すボタン
{let cb-to-excel:CommandButton=
    {CommandButton
        label="PDF出力",
        {on Action do
            let file-url:#Url
            {if-non-null file-url=
                {choose-file
                    style = FileDialogStyle.save-as,
                    filters={{Array-of FileDialogFilter}
                                {FileDialogFilter
                                    "PDF",
                                    {new
                                        {Array-of FileDialogTypeFilter},
                                        {FileDialogTypeFilter "pdf"}
                                    }
                                }
                            }
                }
             then
                {save-as-pdf file-url.name}
            }
        }
    }
}


{value
    {View
        visibility = "normal",

        {VBox
            halign="center",
            {text Excelブックを作成してPDFへ出力},
            {Fill},
            cb-to-excel
        },
        {on WindowClose do
            {exit}
        }
    }
}

まさに、探していたのは「skip-optional-arg」でした!

こちらのコードでも、期待どおりの動作をすることが、確認できました。

ちなみに、dyoshidaさんのコードで
{obj-Excel.ActiveWorkbook.ExportAsFixedFormat

xlTypePDF,

pdf-file-name,

xlQualityStandard,

true,

false,

skip-optional-arg,

skip-optional-arg,

true,

skip-optional-arg

}
とありますが、最後のskip-optional-argは、省略可能なので、
{obj-Excel.ActiveWorkbook.ExportAsFixedFormat

xlTypePDF,

pdf-file-name,

xlQualityStandard,

true,

false,

skip-optional-arg,

skip-optional-arg,

true

}
としても、同等ですね。


ありがとうございました!