मुझे अपनी पहली पोस्ट में एक त्रुटि का पता चला, इसलिए मैंने बैठकर गणित करने का फैसला किया। मैंने पाया कि एक्सेल कॉलम को पहचानने के लिए उपयोग की जाने वाली संख्या प्रणाली आधार 26 प्रणाली नहीं है, जैसा कि किसी अन्य व्यक्ति ने पोस्ट किया है। आधार 10 में निम्नलिखित पर विचार करें। आप वर्णमाला के अक्षरों के साथ भी ऐसा कर सकते हैं।
अंतरिक्ष: ......................... एस 1, एस 2, एस 3: एस 1, एस 2, एस 3
............ …………………… 0, 00, 000: .. ए, एए, एएए
…………। …………………… १, ०१, ००१: .. बी, एबी, आब
…………। ………………………,…:……,……
…………… ………………… ९, ९९, ९९९, १ ९९९: .. Z, ZZ, ZZZ
अंतरिक्ष में कुल राज्य: १०, १००, १०००: २००, २६, ६ ,६, १.५.६
कुल राज्य: ............... १११० ................ १ .२....
आधार संख्या के आधार पर अलग-अलग वर्णानुक्रमिक रिक्त स्थान में Excel संख्या स्तंभ। आप देख सकते हैं कि सामान्य तौर पर, राज्य अंतरिक्ष प्रगति एक आधार के लिए a, 2, ^ 3, ..., और कुछ राज्यों की कुल संख्या a + a है। ^ 2 + ए ^ 3 +…।
मान लीजिए कि आप पहले N रिक्त स्थान में राज्यों A की कुल संख्या ज्ञात करना चाहते हैं। ऐसा करने का सूत्र A = (a) (a ^ N - 1) / (a-1) है। यह महत्वपूर्ण है क्योंकि हमें उस स्थान N को खोजने की आवश्यकता है जो हमारी अनुक्रमणिका K से मेल खाती है। यदि मुझे यह पता लगाना है कि K उस संख्या प्रणाली में है जहाँ मुझे A को K से बदलना है और N के लिए हल करना है। समाधान N = log {है आधार ए} (ए (ए -1) / ए 1)। यदि मैं a = 10 और K = 192 के उदाहरण का उपयोग करता हूं, तो मुझे पता है कि N = 2.23804…। यह मुझे बताता है कि के तीसरे स्थान की शुरुआत में स्थित है क्योंकि यह दो से थोड़ा अधिक है।
अगला कदम यह है कि हम वर्तमान स्थान में कितनी दूर हैं। इसे खोजने के लिए, N के फर्श का उपयोग करके उत्पन्न K से A को घटाएं। इस उदाहरण में, N की मंजिल दो है। तो, ए = (१०) (१० ^ २ - १) / (१०-१) = ११०, जैसा कि अपेक्षित है जब आप पहले दो स्थानों के राज्यों को मिलाते हैं। इसे K से घटाने की आवश्यकता है क्योंकि ये पहले 110 राज्यों को पहले दो स्थानों के लिए पहले ही हिसाब दे चुके होंगे। यह हमें 82 राज्यों के साथ छोड़ देता है। तो, इस संख्या प्रणाली में, बेस 10 में 192 का प्रतिनिधित्व 082 है।
शून्य के आधार सूचकांक का उपयोग करने वाला C # कोड है
private string ExcelColumnIndexToName(int Index)
{
string range = string.Empty;
if (Index < 0 ) return range;
int a = 26;
int x = (int)Math.Floor(Math.Log((Index) * (a - 1) / a + 1, a));
Index -= (int)(Math.Pow(a, x) - 1) * a / (a - 1);
for (int i = x+1; Index + i > 0; i--)
{
range = ((char)(65 + Index % a)).ToString() + range;
Index /= a;
}
return range;
}
// पुरानी पोस्ट
C # में एक शून्य-आधारित समाधान।
private string ExcelColumnIndexToName(int Index)
{
string range = "";
if (Index < 0 ) return range;
for(int i=1;Index + i > 0;i=0)
{
range = ((char)(65 + Index % 26)).ToString() + range;
Index /= 26;
}
if (range.Length > 1) range = ((char)((int)range[0] - 1)).ToString() + range.Substring(1);
return range;
}