예제 #1
0
        public virtual void Import()
        {
            Control targetControl = FocusedGrid();

            if (targetControl == null)
            {
                return;
            }
            if (targetControl.GetType().Equals(typeof(GridControl)))
            {
                try
                {
                    GridControl    gd             = (GridControl)targetControl;
                    GridView       abv            = (GridView)gd.MainView;
                    DataTable      sdt            = (DataTable)gd.DataSource;
                    OpenFileDialog openFileDialog = new OpenFileDialog();
                    openFileDialog.Filter = "Excel|*.xls;*.xlsx";
                    if (openFileDialog.ShowDialog() != DialogResult.Cancel)
                    {
                        SharedFunc.ShowProcess(this, 0, 5);
                        SpreadsheetControl spreadsheetControl = new SpreadsheetControl();
                        spreadsheetControl.LoadDocument(openFileDialog.FileName);
                        SharedFunc.ShowProcess(1);
                        Worksheet      worksheet      = spreadsheetControl.Document.Worksheets.ActiveWorksheet;
                        CellCollection cellCollection = worksheet.Cells;
                        DataTable      idt            = worksheet.CreateDataTable(cellCollection.CurrentRegion, true);
                        //务必添加引用DevExpress.Docs.v16.2.dll
                        DataTableExporter exporter = worksheet.CreateDataTableExporter(cellCollection.CurrentRegion, idt, true);
                        exporter.Export();
                        SharedFunc.ShowProcess(1);
                        foreach (DataColumn dc in idt.Columns)
                        {
                            foreach (GridColumn bgc in abv.Columns)
                            {
                                if (bgc.Caption.Trim().Equals(dc.ColumnName.Trim()))
                                {
                                    dc.ColumnName = bgc.FieldName;
                                    break;
                                }
                            }
                        }
                        //克隆结构 变更数据类型
                        DataTable ndt = idt.Clone();
                        foreach (DataColumn dc in ndt.Columns)
                        {
                            foreach (DataColumn bgc in sdt.Columns)
                            {
                                if (bgc.Caption.Trim().Equals(dc.ColumnName.Trim()))
                                {
                                    dc.ColumnName = bgc.ColumnName;
                                    dc.DataType   = bgc.DataType;
                                    break;
                                }
                            }
                        }
                        foreach (DataRow dr in idt.Rows)
                        {
                            DataRow ndr = ndt.NewRow();
                            foreach (DataColumn dc in idt.Columns)
                            {
                                ndr[dc.ColumnName] = dr[dc.ColumnName];
                            }
                            ndt.Rows.Add(ndr);
                        }
                        SharedFunc.ShowProcess(1);
                        sdt.Merge(ndt, true);
                        SharedFunc.ShowProcess(5);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    SharedFunc.ShowProcess(int.MaxValue);
                }
            }
        }