Convert Excel Range to ADO.NET DataSet or DataTable, etc

后端 未结 5 1499
深忆病人
深忆病人 2020-12-19 11:39

I have an Excel spreadsheet that will sit out on a network share drive. It needs to be accessed by my Winforms C# 3.0 application (many users could be using the app and hit

5条回答
  •  佛祖请我去吃肉
    2020-12-19 12:17

    I made method which can take alredy filtered data from Excel Taking filtered data in Range format

            Worksheet sheet = null;
            sheet = (Worksheet)context.cDocumentExcel.Sheets[requiredSheetName];
    
            DataTable dt = new DataTable();
            sheet.Activate();
            sheet.UsedRange.Select();
            List ranges = new List();
            Range usedrange = sheet.UsedRange;
    
            foreach (var oneRange in usedrange.SpecialCells(XlCellType.xlCellTypeVisible))
            {
                ranges.Add(oneRange);
            }
    
    
            dt = (_makeTableFromRange(ranges));
    

    Converting from Range to DataTable

     private static DataTable _makeTableFromRange(List ranges)
        {
            var table = new DataTable();
    
    
            foreach (var range in ranges)
            {
                while (table.Columns.Count < range.Column)
                {
                    table.Columns.Add();
                }
    
                while (table.Rows.Count < range.Row)
                {
                    table.Rows.Add();
                }
    
                table.Rows[range.Row - 1][range.Column - 1] = range.Value2;
            }
    
    
            //clean from empty rows
            var filteredRows = table.Rows.Cast().
                            Where(row => !row.ItemArray.All(field => field is System.DBNull ||
                                                                     string.Compare((field as string).Trim(), string.Empty) ==
                                                                     0));
            table = filteredRows.CopyToDataTable();
            return table;
        }
    

提交回复
热议问题