Excel列のアルファベット(例えばAA)を数値に変換する(例えば、25) -- javascript フィールド 関連 問題

Convert excel column alphabet (e.g. AA) to number (e.g., 25)












19
vote

問題

日本語

マイグリッドの列ヘッダーは、Excelスプレッドシートのように A,B,C...,AA,AB,AC,... などです。 A => 1, B => 2, AA => 27

のような文字列に文字列を変換する方法
英語

In my grid the column headers are named A,B,C...,AA,AB,AC,...etc like an excel spreadsheet. How can I convert the string to number like: A => 1, B => 2, AA => 27

</div
  
         
         

回答リスト

44
 
vote
vote
ベストアンサー
 

試してみてください:

<事前> <コード> var foo = function(val) { var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0; for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) { result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1); } return result; }; console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
 

Try:

var foo = function(val) {   var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;    for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {     result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);   }    return result; };  console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702] 
</div
 
 
13
 
vote

解決策1:最高のパフォーマンスとブラウザの互換性

<事前> <コード> // convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){ var chrs = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', mode = chrs.length - 1, number = 0; for(var p = 0; p < letters.length; p++){ number = number * mode + chrs.indexOf(letters[p]); } return number; }

解決策2:最高の性能と互換性と短縮(推奨)

<事前> <コード> // convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){ for(var p = 0, n = 0; p < letters.length; p++){ n = letters[p].charCodeAt() - 64 + n * 26; } return n; }

解決策3:ショートコード(ES6矢印関数)

<事前> <コード> // convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){ return letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0); }

テスト:

<事前> <コード> ['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber); // [1, 26, 27, 28, 702, 9007199254740991] lettersToNumber('AAA'); //703
 

solution 1: best performance and browser compatibility

// convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){     var chrs = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', mode = chrs.length - 1, number = 0;     for(var p = 0; p < letters.length; p++){         number = number * mode + chrs.indexOf(letters[p]);     }     return number; } 

solution 2: best performance and compatibility and shorter code (Recommended)

// convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){     for(var p = 0, n = 0; p < letters.length; p++){         n = letters[p].charCodeAt() - 64 + n * 26;     }     return n; } 

solution 3: short code (es6 arrow function)

// convert A to 1, Z to 26, AA to 27 function lettersToNumber(letters){     return letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0); } 

test:

['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber); // [1, 26, 27, 28, 702, 9007199254740991]  lettersToNumber('AAA'); //703 
</div
 
 
7
 
vote

これはあなたが実装するべきコードの迅速な例です。 これは任意の数の文字で機能します。

<事前> <コード> function letterToNumbers(string) { string = string.toUpperCase(); var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', sum = 0, i; for (i = 0; i < string.length; i++) { sum += Math.pow(letters.length, i) * (letters.indexOf(string.substr(((i + 1) * -1), 1)) + 1); } return sum; }
 

Here's a quick example of the code you should implement. This will work with any given number of letters.

function letterToNumbers(string) {     string = string.toUpperCase();     var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', sum = 0, i;     for (i = 0; i < string.length; i++) {         sum += Math.pow(letters.length, i) * (letters.indexOf(string.substr(((i + 1) * -1), 1)) + 1);     }     return sum; } 
</div
 
 
   
   
2
 
vote

私はちょうどジャンクYard F @ $スニペットを書いた...最適化される必要がある.. :)

<事前> <コード> charToNum = function(alpha) { var index = 0 for(var i = 0, j = 1; i < j; i++, j++) { if(alpha == numToChar(i)) { index = i; j = i; } } console.log(index); } numToChar = function(number) { var numeric = (number - 1) % 26; var letter = chr(65 + numeric); var number2 = parseInt((number - 1) / 26); if (number2 > 0) { return numToChar(number2) + letter; } else { return letter; } } chr = function (codePt) { if (codePt > 0xFFFF) { codePt -= 0x10000; return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF)); } return String.fromCharCode(codePt); }

chartonum( 'a')= gt。 1とChartonum( 'aa')= gtを返します。 27;

 

i just wrote a junk yard f@#$ snippet... need to be optimized.. :)

charToNum = function(alpha) {         var index = 0         for(var i = 0, j = 1; i < j; i++, j++)  {             if(alpha == numToChar(i))   {                 index = i;                 j = i;             }         }         console.log(index);     }  numToChar = function(number)    {         var numeric = (number - 1) % 26;         var letter = chr(65 + numeric);         var number2 = parseInt((number - 1) / 26);         if (number2 > 0) {             return numToChar(number2) + letter;         } else {             return letter;         }     } chr = function (codePt) {         if (codePt > 0xFFFF) {              codePt -= 0x10000;             return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));         }         return String.fromCharCode(codePt);     } 

charToNum('A') => returns 1 and charToNum('AA') => returns 27;

</div
 
 
   
   
1
 
vote

私は yoshiの答えをより詳細に説明し、他の言語への移植が簡単です。 :

<事前> <コード> var foo = function(val) { var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var baseNumber = base.length; var runningTotal = 0; var characterIndex = 0; var indexExponent = val.length - 1; while( characterIndex < val.length ){ var digit = val[characterIndex]; var digitValue = base.indexOf(digit) + 1; runningTotal += Math.pow(baseNumber, indexExponent) * digitValue; characterIndex += 1 indexExponent -= 1 } return runningTotal; }; console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
 

I rewrote Yoshi's answer in a more verbose form that explains better how it works and is easier to port to other languages:

var foo = function(val) {     var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';     var baseNumber = base.length;      var runningTotal = 0;     var characterIndex = 0;     var indexExponent = val.length - 1;      while( characterIndex < val.length ){         var digit = val[characterIndex];         var digitValue = base.indexOf(digit) + 1;         runningTotal += Math.pow(baseNumber, indexExponent) * digitValue;          characterIndex += 1         indexExponent -= 1     }      return runningTotal; };  console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702] 
</div
 
 
1
 
vote
<事前> <コード> // Given Column to Number function colToNumber(str) { var num = 0 var i = 0 while (i < str.length ) { num = str[i].charCodeAt() - 64 + num * 26; i++; } return num; } //Given Number to Column name function numberToCol(num) { var str = '', q, r; while (num > 0) { q = (num-1) / 26; r = (num-1) % 26 num = Math.floor(a) str = String.fromCharCode(65 + r) + str; } return str; }
 
// Given Column to Number function colToNumber(str) {   var num = 0   var i = 0   while (i < str.length ) {     num = str[i].charCodeAt() - 64 + num * 26;     i++;    }   return num; }  //Given Number to Column name function numberToCol(num) {   var str = '', q, r;       while (num > 0) {     q = (num-1) / 26;     r = (num-1) % 26     num = Math.floor(a)      str = String.fromCharCode(65 + r) + str;   }   return str; } 
</div
 
 
   
   
0
 
vote
<事前> <コード> var foo = function(val) { var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0; for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) { result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1); } return result; }; console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702] 0
 
Public Function ColLet2Num(Letras As String) 'RALONSO MAYO 2017 'A-> 1 'OQ ->407 'XFD->16384 Dim UnChar As String Dim NAsc As Long Dim F As Long Dim Acum As Long Dim Indice As Long Letras = UCase(Letras) Acum = 0 Indice = 0 For F = Len(Letras) - 1 To 0 Step -1      UnChar = Mid(Letras, F + 1, 1)     NAsc = Asc(UnChar) - 64     Acum = Acum + (NAsc * (26 ^ Indice))     Indice = Indice + 1 Next If Acum > 16384 Then     MsgBox "La celda máxima es la XFD->16384", vbCritical End If ColLet2Num = Acum End Function 
</div
 
 

関連する質問

44  トリプル引用符? ASP.NETでデータバインドJavaScript Stringパラメータを区切る方法  ( Triple quotes how do i delimit a databound javascript string parameter in asp n ) 
Anchor OnClick でJavaScriptデータバインド文字列パラメータを区切りますか? 私はASP.NETリピータコントロールにアンカータグを持っています。 アンカーの OnClick イベントには、JavaScript関数への呼び出しが含ま...

0  LazyWeb:要素の訪問されたクラスに基づいてLI要素を削除するJavaScriptが必要  ( Lazyweb need javascript that removes li elements based on visited class of a el ) 
すでにクリックしたように、必要なデータがたくさんあるこのページを持っていますが、頻繁に青色を探す必要があるので、頻繁に繰り返されます。私はこれがより効率的かもしれないことに気づいて、それが含まれているリンクが訪問されたかどうかに基づいて要素を隠されたように設定...

2  サーバーを必要としないクライアント側(JavaScript)グラフライブラリはありますか? [閉まっている]  ( Is there a client side javascript graph library that doesnt require a server ) 
この質問はスタックオーバーフローガイドラインを満たしていません。現在答えを受け付けていません。 この質問を改善したいですか? ...

35  ASP.NETカスタムクライアント側の検証  ( Asp net custom client side validation ) 
.NET 2.0 Webサイトでのユーザーコントロールのカスタム検証機能があり、支払われた手数料はかかりません。 ascx ファイルにバリデータコードを置き、 Page.ClientScript.RegisterClientScriptBlock() ...

0  リスト項目でディスクを取り除く  ( Getting rid of disc in list item ) 
jQueryを使用してサイトを開発し、jQuery UIタブを作成しています。何らかの理由で、私のタブ(順序付けられていないリスト)は、OS XのFirefox 3を除くすべてのブラウザ(これまでにテスト済み)に弾丸を表示しています.Safari OS X、...

142  定義されたフォントのどれがWebページで使用されていたかを検出する方法  ( How to detect which one of the defined font was used in a web page ) 
私のページに次のCSSルールがあるとします。 <コード> body { font-family: Calibri, Trebuchet MS, Helvetica, sans-serif; } ユーザーのブラウザで定義されたフォントの1つを使用...

1279  jQueryでクッキーを設定/設定解除するにはどうすればよいですか。  ( How do i set unset a cookie with jquery ) 
jQueryを使用してCookieを設定して設定します。たとえば、 test という名前のクッキーを作成し、 1 ?に設定します。 ...

54  2つの関数の違いは? ( "関数x" vs "var x =関数")[重複]  ( The difference between the two functions function x vs var x function ) 
この質問はすでにここで回答を持っています 閉じられた 8年前> 可能な重複: JavaScript:var functionname = function(){} vs関数name(){} < / a> :の違いは何ですか ...

0  JavaScript - 2つの入力のどちらに焦点が当てられていない場合の検出  ( Javascript detecting when neither of two inputs has focus ) 
ページ上の2つの入力に焦点を当てていないときに、特定の機能を呼び出すことができます。ユーザが単に1つの入力から他方の入力に切り替わると、関数を呼び出すことを望まない。任意のアイデア? ...

0  GWTのJavaからJavaScriptに匿名のJavaScriptオブジェクトを渡すにはどうすればよいですか。  ( How can i pass an anonymous javascript object from java to javascript in gwt ) 
JavaScriptライブラリを丸くするGWTラッパーを作成しています。 JavaScript関数の1つは、その引数として匿名オブジェクトを取ります。: <事前> <コード> obj.buildTabs({ hide: true, placeholder: ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有