変数の型について


#1

シート名を変数に格納するために、stringの型を使用するとエラーとなってしまいます。
過去の質問内容から真似をしてみましたが、上手くいきません。

%E7%84%A1%E9%A1%8C2

%E7%84%A1%E9%A1%8C3

どうやらstringの後に[]が付いているようですが、どうやっても変換方法が分からず、ご教示下さい。


#2

mairin さん

こんにちは。

まず、変数:allsheetsのVariable type が【String[ ]】となっている点。
これは意図的に”文字列の配列”として宣言したのでしょうか?

「このデータを」「この型の」「この変数に」「この型に変換して格納したい」と
より具体的に質問すると、回答が得られると思います。


#3

@nk_tecroom さんのに補足で。

String[] というのは、 String型の値を複数束ねたデータ、という意味になります。(書かれている「配列」というのがそれです)

ExcelのWorksheetは複数存在することもあるので、何かしらの方法(Activity?)でシート名を取得すると、個々のシート名が入ったStringの配列になることは十分にあり得ます。
……というか、取得の方法に関してはちょっと身に覚えがあるのですが、それはそれ。

String[] から値を取り出す方法としては、

  • For Eachアクティビティの入力( in よりも後の方) にすることで、個々のitemとしてString型を使用する
  • 変数名の後に(数字) をつけると、数字で指定したn番目の値が取得できる
    補足として変数名.Lengthで「いくつ値があるか」が取れます。また上記のn番目は「0から」なので、Lengthで取得した値-1が最大値になります。

あたりが無難かと思いますので、試してみてください。


#4

アドバイスありがとうございます。

データの詳細ですが、エクセルデータのシート名(1シートしかありません)を
変数に格納して、それを基にシート内の各セルに関数を打ち込んでいくイメージです。
実際、エラーが出ているので、1シートしかない場合でもstring[]の複数データの型が必要なのでしょうか。

以下、現在私が作成中のフローです。
変数のWBは、Excel application scopeのアウトプットで作成したものです。

%E7%84%A1%E9%A1%8C

過去に取得方法が記載してあるフォーラムを見つけましたが、上手くいかないようです。。。
https://forum.uipath.com/t/excel-sheet-name/23570/2


#5

GetSheets関数を用いてファイル名の一覧を取得していますが、
この関数は複数シート名を一括で戻すことを想定しているので、文字列型の配列をもどす仕様になっていますね。(String[] で受けないとエラーになる)
例えば、sheet1,sheet2,sheet3というシートがあるブックに対しては、
{ “Sheet1”,“Sheet2”,“Sheet3” }という形で戻ります。

で、@mairinさまご認識のとおり、「1シートしか戻さなくても」複数データ型必要です。
上の例で言うと、{ “Sheet1” }として戻ります。

業務仕様上、必ず1個しかシートが無いのであれば、
Sheet String[] と定義して、
使うほうは、
Sheet(0)
と、必ず最初の要素を使用することで対応できると思います。


#6

回答ありがとうございます。
仰るとおり、業務上必ず1シートのみでデータが送られてきます。

しかし、stringの複数型がvariable typeの選択欄に無く、変更が出来ない状態です。
手動で作成は出来ないのでしょうか。
重ね重ね申し訳ございませんが、ご教示頂けないでしょうか。
(ctrl+Kはジェネリック型となってしまいます)

%E7%84%A1%E9%A1%8C


#7

array

変数パネルで、Array of [T] を一旦選択して、
その後表示される [Select Types]ダイアログで[String]を選んでみてください。できるはずです。


#8

必ず最初のシート、と決まっているなら、Assignの右辺を

 WB.GetSheets(0)

のように指定すれば、0番目(最初)の値を配列ではないString型としてとれるはずです。


#9

yukino様、Honoka様

御二方のやり方でどちらでも実行出来ました。
大変助かりました。ありがとうございます。

%E7%84%A1%E9%A1%8C