最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

訪(fǎng)問(wèn)Excel的幾種方式介紹

 更新時(shí)間:2013年08月23日 17:05:41   作者:  
本文將為大家介紹下訪(fǎng)問(wèn)Excel的幾種方式:通過(guò)OLEDB方式、通過(guò)Microsoft.Office.Interop.Excel訪(fǎng)問(wèn)及其他相關(guān)等等,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
1、通過(guò)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
兩者區(qū)別:第一個(gè)可以訪(fǎng)問(wèn) Office 97-2003;第二個(gè)既可以訪(fǎng)問(wèn)既可以訪(fǎng)問(wèn) Office 2007,也可以訪(fǎng)問(wèn) Office 97-2003
如果使用第二個(gè),需要安裝AccessDatabaseEngine.exe,可以從微軟官網(wǎng)下載。
如果是使用64位操作系統(tǒng),則插件AccessDatabaseEngine.exe應(yīng)該為64位
如果是使用32位操作系統(tǒng),則插件AccessDatabaseEngine.exe應(yīng)該為32位
如果是使用64位操作系統(tǒng),并且插件AccessDatabaseEngine.exe是32位,需要將應(yīng)用程序池設(shè)置為“啟用32位應(yīng)用程序”,或者sln編譯時(shí),選擇x86而不是anyCPU和x64

2、通過(guò)Microsoft.Office.Interop.Excel訪(fǎng)問(wèn)
問(wèn)題:如果打開(kāi)Excel后,會(huì)彈出提示框,如請(qǐng)激活等,都會(huì)失去Excel的控制,這時(shí)候訪(fǎng)問(wèn)Excel都會(huì)報(bào)錯(cuò)。
處理方法:激活Excel,new完Excel對(duì)象,設(shè)置excel.Interactive = false;完成后excel.Interactive = true;

3、訪(fǎng)問(wèn)Excel會(huì)有權(quán)限限制。需要給DcomExcel賦權(quán)限:(1、交互式用戶(hù)2、兩個(gè)everyone 全部權(quán)限)
問(wèn)題:64位操作系統(tǒng)通過(guò)dcomcnfg.exe看不到32位的Excel DCOM,需要使用另一個(gè)命令
命令行中輸入:mmc comexp.msc /32
找到DCOM中的Excel
標(biāo)識(shí)頁(yè)簽里,設(shè)置為:交互式用戶(hù)
安全頁(yè)簽里,設(shè)置“啟動(dòng)和激活權(quán)限”為自定義,添加everyone所有權(quán)限
設(shè)置“訪(fǎng)問(wèn)權(quán)限”為自定義,添加everyone所有權(quán)限

4、Excel訪(fǎng)問(wèn)完成后,需要?dú)⒌魧?duì)應(yīng)進(jìn)程
方法1:遍歷所有進(jìn)程,只要是Excel進(jìn)程就殺掉。這個(gè)比較暴力,如果別人也在用會(huì)出現(xiàn)問(wèn)題
方法2:
1、winform,console項(xiàng)目有效
復(fù)制代碼 代碼如下:

IntPtr t = new IntPtr(app.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k); //得到本進(jìn)程唯一標(biāo)志k
if (k != 0)
{
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到對(duì)進(jìn)程k的引用
p.Kill(); //關(guān)閉進(jìn)程k
}

2、web、webservices無(wú)效,GetWindowThreadProcessId(t, out k);執(zhí)行完后,取不到進(jìn)程Id,Id使用為0。網(wǎng)上說(shuō)可能是權(quán)限不足,
需要通過(guò)下邊方式提升權(quán)限
復(fù)制代碼 代碼如下:

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、目前采用的是這種方式,也是可以殺掉該進(jìn)程的
復(fù)制代碼 代碼如下:

excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
excel = null;

相關(guān)文章

最新評(píng)論

玛纳斯县| 米脂县| 临夏县| 楚雄市| 柘荣县| 穆棱市| 辰溪县| 湟中县| 保定市| 武义县| 孟津县| 寿光市| 文成县| 仙居县| 芜湖县| 金寨县| 东乌珠穆沁旗| 青铜峡市| 胶州市| 永城市| 上饶县| 大港区| 长丰县| 旅游| 柞水县| 涪陵区| 嘉祥县| 海淀区| 盐亭县| 乌拉特后旗| 康定县| 杭州市| 玉田县| 社旗县| 马龙县| 鹤壁市| 吉木乃县| 夹江县| 桦南县| 怀化市| 阿克|