ExcelToDatagrid

需求:wpf怎麼用datagrid顯示從excel讀取的數據?
思路:

1、讀取excel數據生成datatable;

2、datagrid根據datatable動態添加列;

3、datagrid數據綁定;

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog()
            {
                DefaultExt = ".xls",
                Filter = "Excel2003 Files (*.xls)|*.xls|"
            };
            if (openFileDialog.ShowDialog() == true) {
                string filename = openFileDialog.FileName;
                var dataTable = ExcelToDataTable(filename);
                foreach (var col in dataTable.Columns) {
                    Dgrid.Columns.Add(new DataGridTextColumn() { Header = col.ToString(), Binding = new Binding(col.ToString()) });
                }
                Dgrid.ItemsSource = null;
                Dgrid.ItemsSource = dataTable.DefaultView;

            }
        }

public static DataTable ExcelToDataTable(string filePath,bool hasTitle = true)
        {
            var dt = new DataTable();
            using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                var hssfworkbook = new HSSFWorkbook(file);
                var sheet = hssfworkbook.GetSheetAt(0);
                var rows = sheet.GetRowEnumerator();
                while (rows.MoveNext())
                {
                    var row = (HSSFRow)rows.Current;
                    if (hasTitle)
                    {
                        for (var i = 0; i < row.LastCellNum; i++)
                        {
                            var cell = row.GetCell(i);
                            dt.Columns.Add(cell.ToString());
                        }
                        hasTitle = false;
                    }
                    else
                    {
                        var dr = dt.NewRow();
                        for (var i = 0; i < row.LastCellNum; i++)
                        {
                            var cell = row.GetCell(i);
                            if (cell == null)
                            {
                                dr[i] = null;
                            }
                            else
                            {
                                switch (cell.CellType)
                                {
                                    case CellType.Blank:
                                        dr[i] = "[null]";
                                        break;
                                    case CellType.Boolean:
                                        dr[i] = cell.BooleanCellValue;
                                        break;
                                    case CellType.Numeric:
                                        dr[i] = cell.ToString();
                                        break;
                                    case CellType.String:
                                        dr[i] = cell.StringCellValue;
                                        break;
                                    case CellType.Error:
                                        dr[i] = cell.ErrorCellValue;
                                        break;
                                    case CellType.Formula:
                                        try
                                        {
                                            dr[i] = cell.NumericCellValue;
                                        }
                                        catch
                                        {
                                            dr[i] = cell.StringCellValue;
                                        }
                                        break;
                                    default:
                                        dr[i] = "=" + cell.CellFormula;
                                        break;
                                }
                            }
                        }
                        dt.Rows.Add(dr);
                    }
                }
            }
            return dt;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章