ऐसा करने के लिए, आपको रेंज में प्रत्येक क्षेत्र की गणना करने की आवश्यकता है, और उसके बाद प्रत्येक क्षेत्र के भीतर पंक्तियों का आकलन करें। कुछ हद तक भ्रमित, Excel.Range.Rows संपत्ति श्रेणियों का संग्रह (प्रत्येक पंक्ति का प्रतिनिधित्व करती है) लौटाती है, जबकि Excel.Range.Row संपत्ति श्रेणी में शीर्ष-बाएं सेल की पंक्ति संख्या लौटाती है।
इसलिए, पंक्ति संख्या प्राप्त करने के लिए, आपको क्षेत्र और पंक्ति संग्रहों का आकलन करना चाहिए और फिर श्रेणी का उपयोग करना चाहिए। पंक्ति। उदाहरण के लिए:
Excel.Range range = (Excel.Range)excelApp.Selection;
List<int> rowNumbers = new List<int>();
// Enumerate the Rows within each Area of the Range.
foreach (Excel.Range area in range.Areas)
{
foreach (Excel.Range row in area.Rows)
{
rowNumbers.Add(row.Row);
}
}
// Report the results.
foreach (int rowNumber in rowNumbers)
{
MessageBox.Show(rowNumber.ToString());
}
यदि आप चाहें तो भी लिंक का उपयोग कर सकते हैं।
क्वेरी सिंटेक्स का उपयोग करना:
IEnumerable<int> rowNumbers =
from area in range.Areas.Cast<Excel.Range>()
from row in area.Rows.Cast<Excel.Range>()
select row.Row;
का उपयोग करते हुए विधि सिंटेक्स:
IEnumerable<int> rowNumbers =
range.Areas.Cast<Excel.Range>()
.SelectMany(area => area.Rows.Cast<Excel.Range>()
.Select(row => row.Row));
अद्यतन: अलग पंक्ति नंबर लौटने के लिए कैसे:
अलग पंक्ति संख्या लौटने के लिए (जो तब हो सकता है जब बहु-क्षेत्र सीमा का चयन किया जाता है जहां क्षेत्रों में संपूर्ण पंक्तियां शामिल नहीं होती हैं)।
(1) सबसे आसान लिंकक का उपयोग करना और Distinct ऑपरेटर का उपयोग करना सबसे आसान है।
क्वेरी सिंटेक्स का उपयोग करना::
IEnumerable<int> distinctRowNumbers =
(from area in range.Areas.Cast<Excel.Range>()
from row in area.Rows.Cast<Excel.Range>()
select row.Row)
.Distinct();
विधि सिंटेक्स का उपयोग करना: उदाहरण के लिए
IEnumerable<int> distinctRowNumbers =
range.Areas.Cast<Excel.Range>()
.SelectMany(area => area.Rows.Cast<Excel.Range>()
.Select(row => row.Row))
.Distinct();
(2) Linq का इस्तेमाल कर रही नहीं है, तो आप एक HashSet इस्तेमाल कर सकते हैं। उदाहरण के लिए:
Excel.Range range = (Excel.Range)excelApp.Selection;
HashSet<int> distinctRowNumbers = new HashSet<int>();
// Enumerate the Rows within each Area of the Range.
foreach (Excel.Range area in range.Areas)
{
foreach (Excel.Range row in area.Rows)
{
distinctRowNumbers.Add(row.Row);
}
}
// Report the results.
foreach (int rowNumber in distinctRowNumbers)
{
MessageBox.Show(rowNumber.ToString());
}
(3) शायद सबसे सहज दृष्टिकोण पहले पूरे पंक्तियों में अपने मूल सीमा को परिवर्तित करने के लिए, और फिर पंक्तियों पुनरावृति है। इस मामले में, पंक्तियां पहले से ही अद्वितीय होने की गारंटी दी गई हैं, इसलिए हमें HashSet या Distinct ऑपरेटर का उपयोग करने की आवश्यकता नहीं है।
इन उदाहरणों में, ध्यान दें उपयोग Excel.Range.EntireRow, जो क्षेत्रों और पंक्तियों की गणना से पहले मूल श्रृंखला के लिए लागू किया जाता है: का उपयोग किए बिना Linq
गणना:
List<int> distinctRowNumbers = new List<int>();
foreach (Excel.Range area in range.EntireRow.Areas)
{
foreach (Excel.Range row in area.Rows)
{
distinctRowNumbers.Add(row.Row);
}
}
LINQ का उपयोग कर क्वेरी सिंटैक्स:
IEnumerable<int> distinctRowNumbers =
from area in range.EntireRow.Areas.Cast<Excel.Range>()
from row in area.Rows.Cast<Excel.Range>()
select row.Row;
LINQ का उपयोग विधि वाक्य रचना:
IEnumerable<int> distinctRowNumbers =
range.EntireRow.Areas.Cast<Excel.Range>()
.SelectMany(area => area.Rows.Cast<Excel.Range>()
.Select(row => row.Row));
ध्यान दें कि Range.EntireRow May Return Incorrect Result, लेकिन, अगर मैं इसे सही ढंग से समझता हूं, तो यह केवल Excel '95 और नीचे लागू होता है, जो पूरी तरह से अप्रचलित है। (मैं एक्सेल '97 के नीचे एक्सेल के किसी भी संस्करण के बारे में चिंता नहीं करूंगा।) यदि आप किसी भी संस्करण के मुद्दों के बारे में चिंतित हैं, हालांकि, और सभी एक्सेल संस्करणों में परीक्षण की लक्जरी नहीं है, तो हो सकता है कि आप हैशसेट का उपयोग करना चाहें , या यह सुनिश्चित करने के लिए कि आपकी पंक्ति संख्या अद्वितीय हैं, अलग ऑपरेटर के साथ लिंक का उपयोग करें।
आशा है कि इससे मदद मिलती है!
माइक
मेरा सुझाव है कि आप rowNumbers में डुप्लिकेट प्रविष्टियों से बचने के लिए एक अतिरिक्त परीक्षण जोड़ें। –
अच्छा बिंदु, डॉक्टर ब्राउन! अब ऊपर जोड़ा गया ... :-) –
माइक, वह शानदार था! बहुत बहुत धन्यवाद!!! –