訪問Excel的幾種方式

來源:互聯網
上載者:User
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和x642、通過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;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.