访问Excel的几种方式介绍

所属分类: 实用技巧 / 应用技巧 阅读数: 1732
收藏 0 赞 0 分享
1、通过OLEDB方式
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Sample.xlsx;Extended Properties=Excel 8.0;
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Sample.xlsx;Extended Properties=Excel 12.0
两者区别:第一个可以访问 Office 97-2003;第二个既可以访问既可以访问 Office 2007,也可以访问 Office 97-2003
如果使用第二个,需要安装AccessDatabaseEngine.exe,可以从微软官网下载。
如果是使用64位操作系统,则插件AccessDatabaseEngine.exe应该为64位
如果是使用32位操作系统,则插件AccessDatabaseEngine.exe应该为32位
如果是使用64位操作系统,并且插件AccessDatabaseEngine.exe是32位,需要将应用程序池设置为“启用32位应用程序”,或者sln编译时,选择x86而不是anyCPU和x64

2、通过Microsoft.Office.Interop.Excel访问
问题:如果打开Excel后,会弹出提示框,如请激活等,都会失去Excel的控制,这时候访问Excel都会报错。
处理方法:激活Excel,new完Excel对象,设置excel.Interactive = false;完成后excel.Interactive = true;

3、访问Excel会有权限限制。需要给DcomExcel赋权限:(1、交互式用户2、两个everyone 全部权限)
问题:64位操作系统通过dcomcnfg.exe看不到32位的Excel DCOM,需要使用另一个命令
命令行中输入:mmc comexp.msc /32
找到DCOM中的Excel
标识页签里,设置为:交互式用户
安全页签里,设置“启动和激活权限”为自定义,添加everyone所有权限
设置“访问权限”为自定义,添加everyone所有权限

4、Excel访问完成后,需要杀掉对应进程
方法1:遍历所有进程,只要是Excel进程就杀掉。这个比较暴力,如果别人也在用会出现问题
方法2:
1、winform,console项目有效
复制代码 代码如下:

IntPtr t = new IntPtr(app.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
if (k != 0)
{
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
p.Kill(); //关闭进程k
}

2、web、webservices无效,GetWindowThreadProcessId(t, out k);执行完后,取不到进程Id,Id使用为0。网上说可能是权限不足,
需要通过下边方式提升权限
复制代码 代码如下:

TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero;
if (OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok))
{
//MessageBox.Show("OpenProcessToken="+htok.ToString());
}
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;

if (LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid))
{
//MessageBox.Show("LookupPrivilegeValue="+tp.Luid.ToString());
}

if (AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero))
{
//MessageBox.Show("AdjustTokenPrivileges成功" + tp.Luid.ToString() +" ---"+tp.Count.ToString() + "---"+tp.Attr.ToString());
}

3、目前采用的是这种方式,也是可以杀掉该进程的
复制代码 代码如下:

excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
excel = null;
更多精彩内容其他人还在看

如何设置一个严格30分钟过期的Session示例介绍

SESSION和COOKIE是每个面试官必问的知识点,下面为大家介绍下如何设置一个严格30分钟过期的Session,具体示例如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
收藏 0 赞 0 分享

禁用Cookie三种方法(保护你的隐私)

cookie的作用很多人都知道——cookie里面保存着我们所浏览过的网页的记录,为了安全起见下面为大家介绍禁用Cookie的三种方法,感兴趣的朋友可以参考下哈
收藏 0 赞 0 分享

URL中井号的作用介绍

URL中的井号(#)是比较常见的,下面就为大家介绍一些有关井号的故事,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

访问Excel的几种方式介绍

本文将为大家介绍下访问Excel的几种方式:通过OLEDB方式、通过Microsoft.Office.Interop.Excel访问及其他相关等等,感兴趣的朋友可以参考下,希望对大家有所帮助
收藏 0 赞 0 分享

HttpClient抓取网页的两种方式

可以利用NodeFilter对网页进行分析及利用Visitor对网页进行分析实现抓取网页,具体如下感兴趣的朋友可以参考下,希望对大家有所帮助
收藏 0 赞 0 分享

EditPlus 3设置字体大小(附图)

EditPlus3是我们经常使用的编辑工具,至于如何设置字体大小的问题,有很多朋友在问,下面有个不错教程,大家可以感受下
收藏 0 赞 0 分享

GHOST删除分区和修复硬盘坏扇区不仅仅是备份还原

如果你只是用GHOST来备份和还原数据的话,那你可委屈了这款“功能强大”的软件了。其实GHOST还有一些比较另类的功能,接下来为大家介绍下GHOST删除分区和修复硬盘坏扇区
收藏 0 赞 0 分享

Cookie的使用之保存与获取代码示例

比较实用的设置Cookie和获取Cookie方法,下面的示例大家可以参考下,希望对大家有所帮助
收藏 0 赞 0 分享

sharepoint 2010版本图文安装教程

这篇文章主要为大家详细介绍了Microsoft Share Point2010中文版图文安装的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Chrome开发者工具9个调试技巧详解

对于我们前端开发者来说,Chrome自带的开发者工具绝对是不可或缺的调试工具,我们常用的调试方法包含一些console等,而Chrome自带的开发者工具其实很强大,下面我们来聊聊一些你可能不知道的使用方法。
收藏 0 赞 0 分享
查看更多