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
}
としても、同等ですね。
ありがとうございました!