【質問】
変数と変数を結合した結果の変数名から値を取得したい。
具体的には、データセット名は固定だが、後続の列名を変数で指定し、値を取得したい。
(実現したい動作)
「dataset1.%ColumnName%」から値を取得したい。
%ColumnName%の部分には、A ~ ZZなど、Excelの列名が入る。
エクスプレッションビルダーから
「%"dataset1." & ColumnName%」とすると「dataset1.K」という文字列が返ってきてしまう。
列名を動的に指定しつつ、データセットから値を取得する方法は無いだろうか。
【回答】
固定文字列と変数、および変数と変数を結合した結果の変数名から値を取得するには、Extended Functions配下
関数「GetVarValueByVarName(varName)」を使用します。
今回の場合は、「dataset1.」が固定文字列、後ろの列名が変数により指定される動的文字列となるため、
%GetVarValueByVarName("dataset1." & ColumnName)%
のように指定します。
これにより、今回参照したい列(=ColumnName)がN列だったとすると
まず引数内の文字列が「dataset1.N」と認識され、
それに続いて関数「GetVarValueByVarName(varName)」により「dataset1.N」が解決され
「dataset1」の「N」列にあたるデータの値が返されます。
Excelの列名の動的指定 ( /knowledge/11041/ ) を使用しつつデータセットから値を取得するには
こちらの方法を使用する必要があります。
以下、サンプルです。
<AMVARIABLE NAME="var_count" VALUE="0" />
<AMSHOWDIALOG ACTIVITY="custom" RESULTSTRUCTURE="varFormdata%var_count%" RESULTMETADATA="varFormMetadata%var_count%"><AutoMateDialogDesigner>
<Property name="ErrorCaption">Form Designer</Property>
<Property name="AutoAlignAid">SnapToGrid</Property>
<Property name="DesignerContextMenu">False</Property>
<Property name="AutoScroll">False</Property>
<Property name="AutoScrollMargin">0, 0</Property>
<Property name="AutoScrollMinSize">0, 0</Property>
<Property name="AccessibleDescription" />
<Property name="AccessibleName" />
<Property name="AccessibleRole">Default</Property>
<Property name="AllowDrop">False</Property>
<Property name="AutoScrollOffset">0, 0</Property>
<Property name="BackColor">Window</Property>
<Property name="BackgroundImageLayout">Tile</Property>
<Property name="CausesValidation">True</Property>
<Property name="ContextMenu" />
<Property name="ContextMenuStrip" />
<Property name="Cursor">Default</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="Font">Segoe UI, 9pt</Property>
<Property name="ForeColor">ControlText</Property>
<Property name="Location">0, 0</Property>
<Property name="Margin">3, 3, 3, 3</Property>
<Property name="MaximumSize">0, 0</Property>
<Property name="MinimumSize">0, 0</Property>
<Property name="RightToLeft">No</Property>
<Property name="Size">484, 327</Property>
<Property name="Tag" />
<Property name="Text">
</Property>
<Property name="UseWaitCursor">False</Property>
<Property name="Padding">0, 0, 0, 0</Property>
<Property name="ImeMode">NoControl</Property>
<CustomProperties>
<Property name="HostFormLocation">0, 0</Property>
<Property name="HostFormSize">500, 400</Property>
</CustomProperties>
</AutoMateDialogDesigner></AMSHOWDIALOG>
<!--キャンセルを押すと構造体は作成されない-->
<!--GetVarValueByVarName関数を使用して、変数名と固定文字列を組み合わせた変数名(構造体の要素名)から値を取得する-->
<AMSHOWDIALOG>%GetVarValueByVarName("varFormMetadata" & var_count & ".Text")%</AMSHOWDIALOG>