Advanced Excelでファイル操作(2)Excelファイルを読み込む

自由形式のExcelファイルをアップロードし、データを読み込む手順を確認します。

ForgeコンポーネントAdvanced Excelを利用します。

前提:前回の(1)使い方に従って、セットアップがすんでいること

動作確認環境

Platform Version:11.0.212.0

Service Studio Version:11.5.42

Advanced Excel:2.1.23

概要

こんな感じの入力ファイルを取り込みます。

本来であれば、表の部分はループ処理にしてRecord Listに読み込むはずです。

ここでは例を簡単にするために、青い枠をつけた3カ所だけを対象にします。

API

前回の(1)使い方にも、今回使うAPIの説明があります。

以下では、新しく出てくるAPIだけ説明します。

ファイルを開く

Workbook_Open Actionを使用。

FileName(ファイルのURLなどを指定)かBinary_DataのどちらかのInput Parameterを指定します。

ここでは、ファイルをアップロードしますので、Binary_DataにUpload部品のContentを渡しましょう。

値を読む

Cell_Read Actionを使用します。

Input ParameterにWorksheetがあるため、事前にWorksheet_SelectでWorksheetオブジェクトを取得しておきます。方法は前回記事を参考にしてください。

他に、読み込み対象の行位置(CellRow)と列位置(CellColumn)を指定します。共に1から数え始めます。例えば、上のファイルフォーマットの社員Noであれば、2Cの位置なので、CellRow=2/CellColumn=3です。

参考情報

Worksheet_Selectに存在しないシート名を渡してデバッグで値を確認すると、Outputが-undefined-になりました。

そのままCell_Readに-undefined-のOutput Parameterを渡してみたら、結果は空文字列でした。つまり例外にはなりませんでした。

サンプルプログラム

画面

①FileUpload Widget

②Button Widget。Screen Actionで、次の「ロジック」に示したActionを起動します。

③Input Widget3つ。ファイルから読み込んだ値を表示します。

ロジック

大まかな流れ:

  1. Workbook_OpenでFileUpload Widgetから受け取ったファイルバイナリ(Upload1.Contentなど)を開く
  2. Worksheet_Select。1のOutput ParameterをWorkbook Parameterとして、シート名をWorksheetNameに設定してWorksheetオブジェクトを取得
  3. Cell_Readで対象3セルをそれぞれ指定して値を取得(赤枠で囲んだ部分)。結果は画面のIputに紐付けた変数に設定
  4. Workbook_Closeで1で開いたWorkbookを閉じる(メモリを解放するため)

例外発生時もWorkbookをCloseするため、Workbook_Openした結果はObject型の変数にいったん格納しています。Workbook_Closeはこの変数に対して実行するようにしています。

Cell_Read_StartDateで読むセルは日付型です。日付型のセルは整数値でとれます。

この値は1900/1/1を1として、「整数-1」日後の日付に対応しています。が、そのまま計算すると、Excelと計算が合わない。どうもこれは、Excelで1900年の閏年判定がおかしいようです。

そこで、Date型のセルについては、以下の式を使って実際の日付を計算しています。

「1900/1/1から、セルから取得した数字-2日後」

AddDays(TextToDate("1900/1/1"), TextToInteger(Cell_Read_StartDate.CellValue) - 2)

1900/3/1より前の日付があり得る場合は、微修正の必要があります。たぶん無いと思いますが。

結果

一覧

シェアする

  • このエントリーをはてなブックマークに追加

フォローする