关闭EXCEL进程
//导入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进程的更多相关文章
- 使用windows操作EXCEL如何关闭EXCEL进程
经常项目上有导入excel的需求,其实导入一个固定格式的excel数据非常容易,但是,发现一个问题就是,导入excel后,用户在打开excel时,必须要打开2次才能打开excel,这让人很不爽:开始查 ...
- C# 关闭 Excel进程
namespace ExcelTest { class DataOutput { static void Main(string[] args) ...
- 。net定时关闭excel进程
public void Application_Start() { // 在应用程序启动时运行的代码 System.Timers.Timer timer = new System.Timers.Tim ...
- c#关闭excel进程失败的解决方法
解决方法如下: 1.运行命令dcomcnfg -32,打开组件服务 2.找到execl服务,属性中设置交互式用户 2.设置用户权限 3.设置IIS权限
- c#操作excel后关闭excel.exe的方法
关闭进程 C#和Asp.net下excel进程一被打开,有时就无法关闭, 尤其是website.对关闭该进程有过GC.release等方法,但这些方法并不是在所有情况下均适用. 于是提出了kil ...
- 杀死当前Excel进程
说明: 代码编写过程中,有时需要杀死当前Excel进程,而不影响其他Excel进程. 代码如下: 添加引用: //杀死当前进程的API引用 using System.Runtime.InteropSe ...
- 彻底关闭Excle进程的几个方法
之前研究过的问题,最近有朋友问,这里再总结下做一个笔记. 我们在应用程序里面通过创建Excle应用对象打开Excle的情况下,如果不注意几个问题,可能无法彻底关闭Excle进程,来考察下面的几种情况: ...
- 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二
一张图搞定OAuth2.0 目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...
- C# 如何强制关闭WINWORD进程
private void KillProcess(string processName) //调用方法,传参{try{ Process[] thisproc = Process.GetProcesse ...
随机推荐
- chain.doFilter(request,response)含义
过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...
- AndroidManiFast 字段意义
每个Activity都要在本文件中注册. <Activity>下的<Intent-filter>中. 两个字段的意思是: <action android:name=&qu ...
- JaxWsProxyFactoryBean 与 JaxWsDynamicClientFactory
1. JaxWsProxyFactoryBean 简介:调用方式采用了和RMI类似的机制,即客户端直接调用服务器端提供的服务接口(interface),CXF通过运行时代理生成远程服务的代理对象 ...
- 关于IOC的思考
SOLID面向对象的五个设计原则对于开发人员非常重要,其身影在任何大中型软件项目中随处可见,建议必须掌握并灵活应用.此五原则分别为: 单一职责原则(Single Resposibility P ...
- 弹出框一 之 基于bootstrap和jquery的自定义弹出框
(function ($) { window.Ewin = function () { var html = '<div id="[Id]" class="moda ...
- 给各位聚聚和大大介绍一个开源项目 Expression2Sql(转)
阅读目录 一.Expression2Sql介绍 二.单表简单查询 三.Where条件 四.多表关联查询 五.group by 六.order by 七.函数 八.delete 删除 九.update ...
- 手机注册获取验证码的PHP代码
php代码 <?php require dirname(__FILE__).'/include/common.inc.php';//这是在cms2008下面做的测试 header("c ...
- ajax浅析---ScriptManagerProxy
使用ScriptManagerProxy控件 在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和C ...
- 特殊字符导致用正则表达式进行字符串替换失败,Java replaceAll()方法报错Illegal group reference
String str = "给商品||?>\\n阳澄湖大闸蟹!@#$%^&*()_+-=?:\",.]\\|~.,\/??\\\\|\\br点赞" Stri ...
- webrtc第一篇
1.介绍 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器.乙和服务器之间建立信道.甲给乙发送消息时,甲 ...