作成日: 2022/05/11 最終更新日: 2025/07/03
文書種別
制限事項
詳細
"―"と"ー"を比較処理した場合、Excel(日本語版)では同一と判断されますが、SpreadJSでは異なる文字と判断されます。
JavaScriptではロケール特有の文字列比較を行う’localeCompare’が利用できますが、以下のように日本語ロケールを指定しても、Excelと同じ結果になりません。
◆サンプルコード
// 同一であれば「0」を返しますが、以下の結果は「1」となります。
console.log('ー'.localeCompare('―', 'ja'));
本現象はJavaScriptにおける制限となります。
回避方法
この制限事項はSpreadJS(Ver.18.1.4)で改善されました。
Ver.18.1.4より前のバージョンでは、以下のようにlocaleCompareの処理をカスタマイズして、Excelと同じ結果となるようにすることができます。
Ver15.0.5までは以下のコードをご利用ください。
◆サンプルコード
var compare = String.prototype.localeCompare;
String.prototype.localeCompare = function(strB){
var strC = this.replaceAll('ー', '―');
var strD = strB.replaceAll('ー', '―');
return compare.apply(strC, [strD]);
}
Ver15.1.4以降は以下のコードをご利用ください。
◆サンプルコード
GC.Spread.Common.CultureManager.getCultureInfo().localeCompare = function (str1, str2) {
var tempStr1 = str1.replaceAll('ー', '―');
var tempStr2 = str2.replaceAll('ー', '―');
var firstCompare = tempStr1.localeCompare(tempStr2);
if (firstCompare === 0 && tempStr1 !== tempStr2) {
if (tempStr1 > tempStr2) {
return 1;
} else {
return -1;
}
}
return firstCompare;
}