DevExpress XtraGrid 数据导出导入Excel

// <summary>

        /// 导出按钮

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmAppItem_F9ClickHandler(object sender, EventArgs e)

        {

            string strName = "";

            try

            {

                if (gvSelectedItems.RowCount == 0)

                {

                    MessageBoxShow.ShowProMessage("Grid表格中没有数据,不能导出为Excel");

                    return;

                }

                DateTime MMSDate = RealSailing.UI.Service.ServiceManager.GetSystemDateTime();

                using (SaveFileDialog saveFileDialog = new SaveFileDialog())

                {

                    saveFileDialog.Filter = "导出Excel(*.xls)|*.xls";

                    saveFileDialog.FilterIndex = 0;

                    saveFileDialog.RestoreDirectory = true;

                    saveFileDialog.CreatePrompt = true;

                    saveFileDialog.Title = "导出文件保存路径";

                    //默认的文件名

                    saveFileDialog.FileName = strTitle + " - " + MMSDate.ToString("yyyyMMdd");

                    //saveFileDialog.ShowDialog();

                    if (saveFileDialog.ShowDialog() == DialogResult.OK)

                    {

                        strName = saveFileDialog.FileName;

                        if (strName.Length != 0)

                        {

                            gridColumn2.Visible = false;

                            gridItemID2.Visible = true;

                            gridItemID2.VisibleIndex = 0;

                            gvSelectedItems.ExportToXls(strName);

                            gridColumn2.Visible = true;

                            gridItemID2.Visible = false;

                            MessageBoxShow.ShowProMessage("导出Excel成功", strTitle);

                            //关闭操作

                            System.Reflection.Missing miss = System.Reflection.Missing.Value;

                            Microsoft.Office.Interop.Excel.Application objExcel = new Microsoft.Office.Interop.Excel.Application();

                            Microsoft.Office.Interop.Excel.Workbook objWorkBook = objExcel.Workbooks.Add(miss);

                            Microsoft.Office.Interop.Excel.Worksheet objSheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkBook.ActiveSheet;

                            objWorkBook.Close(null, null, null);

                            objExcel.Workbooks.Close();

                            objExcel.Quit();

                            System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel);

                            System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorkBook);

                            System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet);

                            objSheet = null;

                            objWorkBook = null;

                            objExcel = null;

                        }

                        else

                        {

                            MessageBoxShow.ShowProMessage("保存的Excel名称不能为空");

                        }



                    }

                }

            }

            catch (System.Exception msg)

            {

                MessageBoxShow.ShowProMessage(msg.ToString());

            }

            finally

            {

                GC.Collect();

            }

        }



 



导入Excel

      /// <summary>

        /// 导入按钮

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmAppItem_F8ClickHandler(object sender, EventArgs e)

        {

            try

            {

                OpenFileDialog ofd = new OpenFileDialog();

                ofd.Title = "Excel文件";

                ofd.FileName = "";

                ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

                ofd.Filter = "Excel文件(*.xls)|*.xls";

                ofd.ValidateNames = true; //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名

                ofd.CheckFileExists = true; //验证路径有效性

                ofd.CheckPathExists = true; //验证文件有效性

                string strName = string.Empty;

                if (ofd.ShowDialog() == DialogResult.OK)

                {

                    strName = ofd.FileName;

                }

                if (strName == "")

                {

                    return;

                }

                if (EcxelToGridView(strName, this.gvSelectedItems))

                {

                    MessageBoxShow.ShowProMessage("数据导入成功", strTitle);

                    //isChanged = true;

                }

                else

                    MessageBoxShow.ShowProMessage("数据导入失败,请检查导入的Excel格式与数据是否正确", strTitle);

                this.Cursor = Cursors.Default;

            }

            catch (System.Exception Msg)

            {

                MessageBoxShow.ShowProMessage("数据导入失败,请检查导入的Excel格式与数据是否正确", strTitle);

                //MessageBoxShow.ShowErrMessage(Msg.ToString()+"数据导入失败,请检查导入的Excel格式与数据是否正确");

            }

        }

        /// <summary>

        /// Excel数据导入方法

        /// </summary>

        /// <param name="filePath"></param>

        /// <param name="dgv"></param>

        /// <returns></returns>

        public bool EcxelToGridView(string filePath, DevExpress.XtraGrid.Views.Grid.GridView dgv)

        {

            bool isVailed = false;

            string itemid = string.Empty;

            string itemplu = string.Empty;

            string itemName = string.Empty;

            //根据路径打开一个Excel文件并将数据填充到ds中

            try

            {

                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=YES;IMEX=1'";

                OleDbConnection conn = new OleDbConnection(strConn);

                conn.Open();

                string strExcel = "";

                OleDbDataAdapter myCommand = null;

                //获取Excel中的sheet的名称

                string SheetName= GetExcelSheetNames(filePath)[0];

                //strExcel = "select * from [sheet1$]";

                strExcel = "select * from [" + SheetName + "$]";

                myCommand = new OleDbDataAdapter(strExcel, strConn);

                // RealSailing.DataSet.SlipInfo.SLPD010_SLIPSUMHDS ds = new RealSailing.DataSet.SlipInfo.SLPD010_SLIPSUMHDS();

                System.Data.DataSet ds = new System.Data.DataSet();

                myCommand.Fill(ds, "table1");

                conn.Close();

                if (ds.Tables["table1"].Rows.Count == 0)

                {

                    MessageBoxShow.ShowProMessage("要导入的Excel没有数据");

                }

                ExcelDS.Clear();

                for (int j = 0; j < ds.Tables["table1"].Rows.Count; j++)

                {

                    if (ds.Tables["table1"].Rows[j]["商品id"].ToString().Trim() != string.Empty)

                        itemid = ds.Tables["table1"].Rows[j]["商品id"].ToString().Trim();

                    if (ds.Tables["table1"].Rows[j]["商品货号"].ToString().Trim() != string.Empty)

                        itemplu = ds.Tables["table1"].Rows[j]["商品货号"].ToString().Trim();

                    else

                        itemplu = " ";

                    if (ds.Tables["table1"].Rows[j]["商品名称"].ToString().Trim() != string.Empty)

                        itemName = ds.Tables["table1"].Rows[j]["商品名称"].ToString().Trim();

                    //把数据填充到ds中

                    FillDataToDs(itemid, itemplu, itemName);

                    isVailed = true;

                }

                if (lblSelectDs.Tables["MSTM150_ITEM"].Rows.Count == 0)

                {

                    isVailed = false;

                }

                else if (ExcelDS.Tables["MSTM150_ITEM"].Rows.Count>0)

                {//重复数据 显示提示

                    MsShowData msShow = new MsShowData();

                    msShow.GetDs = ExcelDS;

                    msShow.ShowDialog();

                    isVailed = true;

                }

                return isVailed;

            }

            catch (System.Data.OleDb.OleDbException ex)

            {

                if (ex.Message.IndexOf("不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长") != -1)

                {

                    return false;

                }

                return false;

            }

        }

        /// <summary>

        /// 获取获得当前你选择的Excel Sheet的所有名字

        /// </summary>

        /// <param name="filePath"></param>

        /// <returns></returns>

        public static string[] GetExcelSheetNames(string filePath)

        {

            Microsoft.Office.Interop.Excel.ApplicationClass excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

            Microsoft.Office.Interop.Excel.Workbooks wbs = excelApp.Workbooks;

            Microsoft.Office.Interop.Excel.Workbook wb = wbs.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,

            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,

            Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            int count = wb.Worksheets.Count;

            string[] names = new string[count];

            for (int i = 1; i <= count; i++)

            {

                names[i - 1] = ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[i]).Name;

            }

            wb.Close(null, null, null);

            excelApp.Quit();

            wbs.Close();

            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs);

            excelApp = null;

            wbs = null;

            wb = null;

            return names;

        }

        private void FillDataToDs(string itemid, string itemplu, string itemName)

        {

            DataRow[] rows = lblSelectDs.Tables["MSTM150_ITEM"].Select(string.Format("MSTM150_ITEMID='{0}'", itemid));

            if (rows.Length == 0)

            {

                if (itemid.Trim() != string.Empty && itemplu.Trim() != string.Empty && itemName != string.Empty)

                {

                    DataRow dr;

                    dr = lblSelectDs.Tables["MSTM150_ITEM"].NewRow();

                    dr[MSTM150_ITEM.MSTM150_ITEMID] = itemid;

                    dr["MSTM151_PLUCD"] = itemplu;

                    dr["MSTM150_ITEMCNM"] = itemName;

                    dr["CheckRemove"] = "0";

                    lblSelectDs.Tables["MSTM150_ITEM"].Rows.Add(dr);

                }

                //else if (itemid.Trim() == string.Empty)

                //{

                //    string st = "导入的商品id不允许为空";

                //    sb.Append(st);

                //    sb.Append("\r\n");

                //}

                //else if (itemplu.Trim() == string.Empty)

                //{

                //    string st = "导入的商品编码不允许为空";

                //    sb.Append(st);

                //    sb.Append("\r\n");

                //}

                //else if (itemName.Trim() == string.Empty)

                //{

                //    string st = "导入的商品名称不允许为空";

                //    sb.Append(st);

                //    sb.Append("\r\n");

                //}

            }

            else if(rows.Length>0)

            {

                ExcelDS.Tables["MSTM150_ITEM"].ImportRow(rows[0]);

            }

        }

        private void gvSelectedItems_RowCountChanged(object sender, EventArgs e)

        {//导出按钮

            this.F9Property.Enable=(gvSelectedItems.RowCount == 0) ? false : true;

        }



//导入导出Excel 注意的是及时的关闭Excel,不然占用进程很麻烦,我调试了大半天太弄好的

你可能感兴趣的:(DevExpress)