c# - मैं एपप्लस का उपयोग कर एक्सेल टेबल में पंक्तियों के माध्यम से कैसे पुन: प्रयास करूं?




excel epplus (4)

आप तालिका की .Worksheet संपत्ति तक पहुंच सकते हैं और इसकी कोशिकाओं को इंडेक्स कर सकते हैं। मैंने इस उद्देश्य के लिए एक विस्तार विधि लिखा है, जो सेल मूल्य पर कॉलम नाम मैपिंग शब्दकोषों की एक श्रृंखला उत्पन्न करता है:

public static IEnumerable<IDictionary<string, object>> GetRows(this ExcelTable table)
{
    var addr = table.Address;
    var cells = table.WorkSheet.Cells;

    var firstCol = addr.Start.Column;

    var firstRow = addr.Start.Row;
    if (table.ShowHeader)
        firstRow++;
    var lastRow = addr.End.Row;

    for (int r = firstRow; r <= lastRow; r++)
    {
        yield return Enumerable.Range(0, table.Columns.Count)
            .ToDictionary(x => table.Columns[x].Name, x => cells[r, firstCol + x].Value);
    }
}

मैं epplus लिए नया epplus , और मैं एक्सेल टेबल से कुछ मूल्य पढ़ने की कोशिश कर रहा हूं।

अभी तक मेरे पास इतना ही है:

var fileInfo = new FileInfo(filename);
using(var excelPackage = new OfficeOpenXml.ExcelPackage(fileInfo))
{
    foreach (var sheet in excelPackage.Workbook.Worksheets)
    {
        foreach (ExcelTable table in sheet.Tables)
        {
             foreach(var row in table.Rows)  // <-- !!
             { ... }
        }
    }
}

हालांकि, अब मैं स्टंप हो गया हूं, क्योंकि ExcelTable केवल Columns संपत्ति है, लेकिन एक Rows संपत्ति नहीं है जैसा कि मैंने उम्मीद की थी। मुझे लाइब्रेरी में किसी ऑब्जेक्ट पर Rows संपत्ति नहीं मिल रही है।

पंक्ति के लिए पंक्ति पढ़ने, मैं एक टेबल के माध्यम से कैसे पुन: प्रयास करूं?


एक ही समस्या पर मदद की तलाश करते समय, मैं इस link ठोकर खाई। यह निश्चित रूप से मेरे लिए काम किया! इंटरऑप ऑब्जेक्ट्स का उपयोग करने से निश्चित रूप से बेहतर है। :)

हालांकि मैंने इसे थोड़ा अनुकूलित किया:

var package = new ExcelPackage(new FileInfo("sample.xlsx"));

ExcelWorksheet workSheet = package.Workbook.Worksheets[0];
var start = workSheet.Dimension.Start;
var end = workSheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{ // Row by row...
    for (int col = start.Column; col <= end.Column; col++)
    { // ... Cell by cell...
        object cellValue = workSheet.Cells[row, col].Text; // This got me the actual value I needed.
    }
}

मैं एपप्लस के बारे में निश्चित नहीं हूं, लेकिन मैंने सोचा कि मैं LinqToExcel का उपयोग करने का एक त्वरित सुझाव LinqToExcel

var excel = new ExcelQueryFactory(excel);

var info = excel.Worksheet("Sheet1")
                .Select(z=> new
                     {
                      Name = row["Name"].Cast<string>(),
                      Age = row["Age"].Cast<int>(),
                     }).ToList();

आप इसे NuGet से प्राप्त कर सकते हैं

Install-Package LinqToExcel

ExcelRange रूप में पूरी पंक्ति प्राप्त करने का एक तरीका यहां ExcelRange जिसे फिर पुनरावृत्त किया जा सकता है या LINQ के लिए उपयोग किया जा सकता है:

for (var rowNum = 1; rowNum <= sheet.Dimension.End.Row; rowNum++)
{
    var row = sheet.Cells[string.Format("{0}:{0}", rowNum)];
    // just an example, you want to know if all cells of this row are empty
    bool allEmpty = row.All(c => string.IsNullOrWhiteSpace(c.Text));
    if (allEmpty) continue; // skip this row
    // ...
}