セルから取得した値の型の取り扱い

はじめに

Excelのセルは数値・文字列・真偽値の値を取るため、Rangeメソッドを使用した際戻り値が以下のユニオン型となります。getValueとgetValuesメソッドについて確認しましょう。

/* getValueメソッドは文字列型・数値型・真偽値型のユニオン型で戻り値を返す */
ExcelScript.Range.getValue(): string | number | boolean
/* getValuesメソッドは文字列型・数値型・真偽値型のユニオン型の配列で戻り値を返す */
ExcelScript.Range.getValues(): (string | number | boolean)[][]

そのため、上メソッドで取得した値は数値・文字列・真偽値型と型の範囲が広いため、以下のように文字列メソッドであるlengthプロパティを適応しようとした際にエラーが発生します(セルの値が文字列でも型が数・文字・真偽値のユニオン型のため)。

/* 数値・文字列・真偽値のユニオン型のvalue変数から文字列プロパティlengthを呼び出した場合 */
function main(workbook: ExcelScript.Workbook) {
	const value = workbook.getActiveWorksheet().getRange("A1").getValue()
	const textLength = value.length /* エラーが発生 */
}

lengthプロパティは使用するオブジェクトがstring型である必要があるのに対して
valueが string | number | boolean型であるため型エラーが発生
セルから取得した値は、型について適切に処理が必要

型変換|セルの値が不定の場合

型変換を行うことで、変数の型を一意にするだけでなくExcelの実値についても確実に型を変換することができます。
ただし、配列に対して直接使用することはできないため、配列の各要素を型変換する際は、繰返構文や関数と組合せて各々に適応する必要があります。

/* toStringメソッドを使用した場合 */
function main(workbook: ExcelScript.Workbook) {
	const value:string = workbook.getActiveWorksheet().getRange("A1").getValue().toString()
}
/* String関数を使用した場合 */
function main(workbook: ExcelScript.Workbook) {
	const value:string = String(workbook.getActiveWorksheet().getRange("A1").getValue())
}

型変換はセルから取得した実値の変換を行う(セルの数値データが文字列になっている場合等に有効)

型アサーション|セルの値が事前に分かっている場合

Excelで取得する値が事前に分かっている場合は、型アサーション(as構文)を使用して特定の型を明示的に指定することができます。ただし、型アサーションは型の指定をするに留まるため、型変換のようにExcelから取得した実値まで変換してくれない点は注意が必要です。

/* A1の値を文字列型として指定(セルA1が数値の場合、文字列にはならず数値のままです) */
function main(workbook: ExcelScript.Workbook) {
	const value: string = workbook.getActiveWorksheet().getRange("A1").getValue() as string
}
/* A1:C3の値を全て文字列型として指定 */
function main(workbook: ExcelScript.Workbook) {
	const values: string[][] = workbook.getActiveWorksheet().getRange("A1:C3").getValues() as string[][]
}

型アサーションはユーザ側で型の指定を行う
型アサーションは型変換が行われないため注意

getText ・ getTexts|セルの値を文字列で取り出すとき

getValue ・ getValuesメソッドでは、数値・文字列・真偽値のユニオン型でデータを取得しますが、Excelのセルの値が文字列であると分かっている場合にはgetText・getTextsメソッドを使用できます 。

getText・getTextsメソッドはセルの表示値を文字列として取得します。

function main(workbook: ExcelScript.Workbook) {
	const value: string = workbook.getActiveWorksheet().getRange("A1").getText()
}
function main(workbook: ExcelScript.Workbook) {
	const values: string[][] = workbook.getActiveWorksheet().getRange("A1:C3").getTexts()
}

getText ・ getTextsメソッドはセルの値が数値や真偽値でも文字列として値を取得する
セルの値に数値や書式フォーマットが適応されている際は表示の値をそのまま取得するため、使用の際に注意が必要

コメント

タイトルとURLをコピーしました