मुझे इसका उत्तर देने के लिए थोड़ा देर हो रही है, लेकिन स्वीकृत उत्तर काम नहीं करेगा यदि आपकी रुचि रखने वाली पंक्ति में रिक्त कक्ष हैं क्योंकि उन्हें XML में होने की गारंटी नहीं है, स्कीमा खाली कोशिकाओं को छोड़ा जा सकता है।
प्राप्त करने के लिए सूचकांक आप Cell
वस्तु wihch एक CellReference
संपत्ति है कि प्रारूप A1
, B1
आदि आपको लगता है कि संदर्भ का उपयोग कर सकते स्तंभ संख्या को निकालने के लिए में संदर्भ देता है का उपयोग कर सकते हैं।
आप शायद जानते हैं, एक्सेल A = 1
, B = 2
आदि में Z = 26
अप करने के लिए, जिसके आधार पर कोशिकाओं A
लगी होती हैं देने के लिए AA = 27
, AB = 28
आदि ध्यान दें कि AA
पहले A
के मामले में 26 बार के एक मूल्य है दूसरा; यानी यह "लायक" है जबकि दूसरा A
कुल "27"
कॉलम इंडेक्स को काम करने के लिए आप अक्षरों को उलट सकते हैं तो पहले अक्षर का मूल्य लें और इसे जोड़ें चालू हालत में कुल। फिर दूसरे अक्षर का मूल्य लें और इसे 26 तक गुणा करें, कुल मिलाकर कुल संख्या में जोड़ें। तीसरे के लिए आप इसे दो बार गुणा करके जोड़ते हैं, चौथे भाग के लिए इसे 26 गुणा और गुणा करके गुणा करें।
तो स्तंभ ABC
के लिए आप क्या करेंगे:
C = 3
B = 2 * 26 = 52
A = 1 * 26 *26 = 676
3 + 52 + 676 = 731
सी # में निम्नलिखित काम करेगा:
private static int? GetColumnIndex(string cellReference)
{
if (string.IsNullOrEmpty(cellReference))
{
return null;
}
//remove digits
string columnReference = Regex.Replace(cellReference.ToUpper(), @"[\d]", string.Empty);
int columnNumber = -1;
int mulitplier = 1;
//working from the end of the letters take the ASCII code less 64 (so A = 1, B =2...etc)
//then multiply that number by our multiplier (which starts at 1)
//multiply our multiplier by 26 as there are 26 letters
foreach (char c in columnReference.ToCharArray().Reverse())
{
columnNumber += mulitplier * ((int)c - 64);
mulitplier = mulitplier * 26;
}
//the result is zero based so return columnnumber + 1 for a 1 based answer
//this will match Excel's COLUMN function
return columnNumber + 1;
}
ध्यान दें कि CellReference
नहीं एक्सएमएल या तो (हालांकि में होने की गारंटी है मैंने इसे कभी नहीं देखा है)। ऐसे मामले में जहां CellReference
शून्य है, सेल को बाईं ओर उपलब्ध सेल में रखा गया है। RowIndex
भी spec में अनिवार्य नहीं है, इसलिए यह भी छोड़ा जा सकता है कि सेल को उच्चतम पंक्ति में रखा गया है। this question में अधिक जानकारी देखी जा सकती है। @BCdotWEB से answer उन मामलों में सही दृष्टिकोण है जहां CellReference
null
है।
भविष्य पाठकों के लिए है, मैं [इस जवाब को देखने] सलाह देते हैं (http://stackoverflow.com/a/667902/906773)। –