三种从excel中提取数据的方法之第二种2020-11-23

第二种,直接操作已经打开了的Excel文件,这种方法使用excel自带的功能就行了,直接在项目中创建VSTO应用程序
还有两种需要用到的方法
之前写过的一篇文章:https://www.jianshu.com/p/17d98ab7b83a
然后从文件中提取编码和数量和上一篇一样
上一篇中关闭excel进程的方法:

//关闭excel时使用
        private static void CloseProc(string ProcName)//关闭excel时需要用
        {
            ArrayList procList = new ArrayList();
            string tempName;
            foreach (System.Diagnostics.Process thisProc in System.Diagnostics.Process.GetProcesses())
            {
                tempName = thisProc.ProcessName;
                procList.Add(tempName);
                if (tempName == ProcName)
                {
                    thisProc.Kill(); //当发送关闭窗口命令无效时强行结束进程 
                }
            }
        }

检测电脑中是否安装excel方法:

        private static bool isExcelInstalled()
        {
            Type type = Type.GetTypeFromProgID("Excel.Application");
            return type != null;
            //返回不为空的true或者false
        }

详细获取方法:

            //获取当前活动的应用程序
            Application app = Globals.ThisAddIn.Application;
            app.ScreenUpdating = true;//禁止刷新屏幕
            app.DisplayAlerts = false;//是否弹出提示框
            //是否显示表格活动
            app.Visible = true;
            //获取当前活动的活动页
            _Workbook wb = app.ActiveWorkbook;
            wb.Application.Visible = true;//是否显示APP操作
            //获取当前的sheet
            Worksheet ws= wb.ActiveSheet;
                try
                {
                    wb = wbs.Open(路径);//打开excel表
                    ws = wb.ActiveSheet;//获取活动的sheet,一般为第一个sheet
                    //每个公司表格样式不同,下面的获取位置也不同,请自行修改,ZW表格的内容是从第9行开始,所以下面 cout=9
                    //提取数据,直接从9~99999行中查找编码和数量不为空的数据,为空就停止
                    for (int cout = 9; cout <= 99999; cout++)
                    {//下面是从[9,3]9行3列中获取值,后面9行8列中获取值,分别代表的是编码和数量
                        if (ws.Cells[cout, 3].Value2 != null && ws.Cells[cout, 8].Value2 != null)
                        {
                            //此处就可以将你获取到的数据,进行处理了
                            //...............
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "提取错误"); 
                }
                try
                {//释放资源,必须要处理的一步,如果不处理,数据比较多的话会造成短时间内内存被异常占用,直到系统自动回收为止
                    if (wb != null)
                    {
                        wb.Close(Type.Missing, Type.Missing, Type.Missing);
                    }
                    else
                    {
                        wb = null;
                    }
                    if (wbs != null)
                    {
                        wbs.Close();
                    }
                    else
                    {
                        wbs = null;
                    }
                    if (app != null)
                    {
                        app.Quit();
                    }
                    else
                    {
                        app = null;
                    }
                    //GC.Collect();//系统自动回收资源,没有人为释放彻底,弃用
                    //关闭excel进程,如果不关闭,也会造成资源被占用,excel进程一堆的情况
                    CloseProc("EXCEL");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "释放资源错误");
                }

excel原生功能,需要安装office套件,下一篇教你使用第三方类库来操作excel,未完待续........

你可能感兴趣的:(三种从excel中提取数据的方法之第二种2020-11-23)