//导入Windows类库,可以获得进程ID
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowsThreadProcesId( IntPtr bwnd,out int ID );

/// <summary>
        /// 从Excel 获取学生数据
        /// </summary>
        /// <param name="filePath">带完整路径的Excel文件名</param>
        /// <param name="sheetName">工作表名字</param>
        /// <returns>学生实体集合</returns>
        public List<Student> GetStudentsFromExcel(string filePath, string sheetName)
        {

List<Student> students = new List<Student>();
            Microsoft.Office.Interop.Excel.Application excel =
                new Microsoft.Office.Interop.Excel.Application();
            Worksheet sheet = null;
            Range rNo = null;
            try
            {
                excel.Workbooks.Open(filePath);//打开Excel 文件

foreach (Worksheet wsheet in excel.ActiveWorkbook.Sheets)
                {
                    if (wsheet.Name == sheetName)
                    {
                        sheet = wsheet;
                        break;
                    }
                }
                //读取单元格数据
                if (sheet != null)
                {
                    int row = 2;//当前行号
                    while (true)
                    {
                        //如果碰到学号为空的行,则停止读取数据
                         rNo = sheet.Cells[row, 1] as Range;
                        if (rNo.Text.ToString().Trim().Length == 0)
                        {
                            break;
                        }

Student stu = new Student();
                        //学号
                        Range rContent = sheet.Cells[row, 1] as Range;
                        stu.StudentNo = Convert.ToInt32(rContent.Text.ToString().Trim());
                        //密码
                        rContent = sheet.Cells[row, 2] as Range;
                        stu.LoginPwd = rContent.Text.ToString().Trim();
                        //姓名
                        rContent = sheet.Cells[row, 3] as Range;
                        stu.StudentName = rContent.Text.ToString().Trim();
                        //性别
                        rContent = sheet.Cells[row, 4] as Range;
                        stu.Gender = rContent.Text.ToString().Trim() == "男" ? true : false;
                        //年级
                        rContent = sheet.Cells[row, 5] as Range;
                        stu.GradeId = new GradeManager().GetGradeId(rContent.Text.ToString().Trim());
                        //电话
                        rContent = sheet.Cells[row, 6] as Range;
                        stu.Phone = rContent.Text.ToString().Trim();
                        //地址
                        rContent = sheet.Cells[row, 7] as Range;
                        stu.Address = rContent.Text.ToString().Trim();
                        //出生年月日
                        rContent = sheet.Cells[row, 8] as Range;
                        stu.BornDate = Convert.ToDateTime(rContent.Text.ToString().Trim());
                        //邮箱
                        rContent = sheet.Cells[row, 9] as Range;
                        stu.Email = rContent.Text.ToString().Trim();
                        //身份证号
                        rContent = sheet.Cells[row, 10] as Range;
                        stu.IdentityCard = rContent.Text.ToString().Trim();

students.Add(stu);
                        row += 1;
                    }
                }
                excel.Visible = true;
                //关闭WorkBook
                excel.ActiveWorkbook.Close();
                //关闭Excel
                excel.Quit();
            }
            finally
            {
                ////主动释放COM对象
                //Marshal.ReleaseComObject(sheet);
                //Marshal.ReleaseComObject(excel);
                //Marshal.ReleaseComObject(rNo);
                ////对象引用设置null
                // sheet = null;
                // excel = null;
                // rNo = null;
                ////通过垃圾收集器回收对象
                // GC.Collect();
                //通过Hwnd 获得当前Excel Application对象的句柄对象
                IntPtr t = new IntPtr(excel.Hwnd);
                int k = 0;
                //调用方法获取进程ID
                GetWindowsThreadProcesId(t,out k);
                //由进程ID获取进程
                Process p = Process.GetProcessById(k);
                p.Kill();//关闭进程
            }
            return students;
        }

关闭EXCEL进程的更多相关文章

  1. 使用windows操作EXCEL如何关闭EXCEL进程

    经常项目上有导入excel的需求,其实导入一个固定格式的excel数据非常容易,但是,发现一个问题就是,导入excel后,用户在打开excel时,必须要打开2次才能打开excel,这让人很不爽:开始查 ...

  2. C# 关闭 Excel进程

    namespace ExcelTest   {       class DataOutput       {           static void Main(string[] args)     ...

  3. 。net定时关闭excel进程

    public void Application_Start() { // 在应用程序启动时运行的代码 System.Timers.Timer timer = new System.Timers.Tim ...

  4. c#关闭excel进程失败的解决方法

    解决方法如下: 1.运行命令dcomcnfg -32,打开组件服务 2.找到execl服务,属性中设置交互式用户 2.设置用户权限 3.设置IIS权限

  5. c#操作excel后关闭excel.exe的方法

    关闭进程 C#和Asp.net下excel进程一被打开,有时就无法关闭,   尤其是website.对关闭该进程有过GC.release等方法,但这些方法并不是在所有情况下均适用.  于是提出了kil ...

  6. 杀死当前Excel进程

    说明: 代码编写过程中,有时需要杀死当前Excel进程,而不影响其他Excel进程. 代码如下: 添加引用: //杀死当前进程的API引用 using System.Runtime.InteropSe ...

  7. 彻底关闭Excle进程的几个方法

    之前研究过的问题,最近有朋友问,这里再总结下做一个笔记. 我们在应用程序里面通过创建Excle应用对象打开Excle的情况下,如果不注意几个问题,可能无法彻底关闭Excle进程,来考察下面的几种情况: ...

  8. 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二

    一张图搞定OAuth2.0   目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...

  9. C# 如何强制关闭WINWORD进程

    private void KillProcess(string processName) //调用方法,传参{try{ Process[] thisproc = Process.GetProcesse ...

随机推荐

  1. autofac获取全局Container

    _UserService = ((IContainerProviderAccessor)HttpContext.Current.ApplicationInstance).ContainerProvid ...

  2. jsp简单标签开发(一)

    孤傲苍狼 @Override22 public void doTag() throws JspException, IOException {23 //得到代表jsp标签体的JspFragment24 ...

  3. linux 下 ls 文件夹和文件没有颜色的解决办法

    .bashrc 中加入 alias ls="ls --color"

  4. mysql 索引及其原理

    mysql 索引 KEY与INDEX的区别: KEY is something on the logical level, describes your table and database desi ...

  5. Redis-cluster集群【第一篇】:redis安装及redis数据类型

    Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...

  6. OC-成员变量的作用域

    #import <Foundation/Foundation.h> @interface Person : NSObject { int _no; @public // 在任何地方都能直接 ...

  7. java语言一维数组,对象数组

    /** * 对象数组的使用 */package com.test5; import java.io.BufferedReader;import java.io.InputStream;import j ...

  8. 数据库逆向框架代码生成工具:MyBatis Generator的使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  9. android控件库(1)-带删除功能的EditText

    DJEditText.java /** * Created by xp.chen on 2016/11/25. */ public class DJEditText extends AppCompat ...

  10. echo '.SUFFIXES: .cpp' >> ${OUTPUT_FILE}

    当前makefile或shell内支持文件后缀的类型列表,意思是文件支持.cpp结尾的类型,并且将他,输出到OUTPUT_FILE函数. 见网上有人说: “makefile中 .SUFFIXES: . ...