配列で値が入っているか調べる場合

datatableにデータを格納してfor each rowである列の値を判断して処理を考えています。

値がない場合、いわゆるnull.""の場合処理しないと思います。

その際の判断として項目名に値が入っているか調べるのに下記内容で記載しました。
assgin : Vresult = string.IsNullOrEmpty(stringarray(“項目名”))
Vresult は、booleanで、値がなければtrue、あればfalseを返すと考えていましたがうまくいきません。
ご教示いただければと思います。

この「stringarray」はどのような型でしょうか。
For Each Rowで得られる、ループごとのデータはDataRow型なので、配列とはちょっと違います。
それを何らかの方法で配列にしているのであれば、まず、その方法も確認しないといけません。

string.IsNullOrEmpty(stringarray(“項目名”))ですが、excelのセルです。
セルに値が入っているか判断しようとしています。
excel上ではdouble型ではないかと思います。

for each rowでread cell値を取得しようとしたところnullがあるということでエラーになり
色々調べ、string.IsNullOrEmpty(stringarray(“項目名”))を用いました。

ごめんなさい、状況がちょっと読めないので整理させてください。

  1. Excelからのデータ読み込みは何を使っていますか?(Read RangeまたはRead Row、Read Cellあたりだと思いますが)

  2. stringarray の変数の型をもう一度確認してみてください。For Each Rowを使用しているのであれば、上記のようにDataRow型になっている筈です。For Eachで見ている、またはRead Row等で直接読んだ値を格納している場合は、Variablesパネルで「Variable Type」が何になっているかを直接確認してみてください。

UiPathで通常「Excelのセル」というデータ型は存在しない(ExcelのInteropを読ませれば無理矢理使うことは可能ですが、多分それはやっていないと思っています)ので、まず「何を読み取ろうとしているか」を明確化する必要があります。

多忙なところ申し訳ございません。
1 excelは、read rangeで読み込みデータテーブルに格納しています。
2 assgin:
変数 = string.IsNullOrEmpty(stringarray(“項目名”))
変数はbooleanとしています。

DataTableからだと、おそらく stringarray はDataRowになっている筈です。
DataRow(“項目名”) だけだと、実際にデータを読んでみるまでは形式がわからないので、Object型(≒なんでもあり)として扱われます。
String.IsNullOrEmptyの引数は文字列に限定されるので、そこでエラーが出ているのだと思います。

特に値の変換などを噛まさないのであれば、

 string.IsNullOrEmpty(stringarray(“項目名”).ToString())

と、明示的にString型に変換して試してみてください。

1 Like