• 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("
    ");
                    //}
                    //else if (itemplu.Trim() == string.Empty)
                    //{
                    //    string st = "导入的商品编码不允许为空";
                    //    sb.Append(st);
                    //    sb.Append("
    ");
                    //}
                    //else if (itemName.Trim() == string.Empty)
                    //{
                    //    string st = "导入的商品名称不允许为空";
                    //    sb.Append(st);
                    //    sb.Append("
    ");
                    //}
                }
                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,不然占用进程很麻烦,我调试了大半天太弄好的
  • 相关阅读:
    5 Longest Palindromic Substring(easy)
    4 Median of Two Sorted Arrays(medium)
    前言
    3 Longest Substring Without Repeating Characters(medium)
    JavaScript&jQuery学习笔记
    禅道、jenkins部署记录
    jenkins部署自动化项目备注
    pytest
    我的第一个py爬虫-小白(beatifulsoup)
    单元测试python unittest
  • 原文地址:https://www.cnblogs.com/wordgao/p/4560220.html
Copyright © 2020-2023  润新知