Excel에 액세스하는 방법 설명

2718 단어 Excel 액세스
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에 액세스할 수 있습니다. 두 번째를 사용하려면 AccessDatabase Engine을 설치해야 합니다.exe, 마이크로소프트 홈페이지에서 다운로드할 수 있습니다.64비트 운영 체제를 사용하는 경우 플러그인 AccessDatabaseEngine.exe는 64비트여야 합니다. 32비트 운영체제를 사용하는 경우 플러그인AccessDatabaseEngine입니다.exe는 32비트여야 합니다. 64비트 운영체제를 사용하고 플러그인인 AccessDatabaseEngine을 사용해야 합니다.exe는 32비트입니다. 응용 프로그램 풀을 "32비트 응용 프로그램 사용"으로 설정하거나 sln을 컴파일할 때 anyCPU와 x642 대신 x86을 선택하십시오. Microsoft를 통해.Office.Interop.Excel 액세스 문제: Excel을 열면 활성화 등의 프롬프트 상자가 뜨고 Excel에 대한 제어가 해제됩니다. 이때 Excel에 액세스하면 오류가 발생합니다.처리 방법: Excel 활성화, new 완료 Excel 대상, excel 설정.Interactive = false;완성 후 excel.Interactive = true; 3. Excel에 액세스할 수 있는 권한이 제한됩니다.DcomExcel에 권한이 필요합니다. (1, 상호작용 사용자 2, 두 개의 모든 권한) 문제: 64비트 운영체제는 dcomcnfg를 통과합니다.exe는 32비트의 Excel DCOM을 볼 수 없습니다. 다른 명령줄에 mmccomexp를 입력해야 합니다.msc/32에서 DCOM의 Excel 표지 페이지 서명을 찾았습니다. 설정: 상호작용 사용자 안전 페이지 서명, "시작 및 활성화 권한"사용자 정의, 모든 권한 추가 설정 "액세스 권한"사용자 정의, 모든 권한 추가 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, 웹, 웹 서비스가 잘못되었습니다. Get Windows Thread Process Id(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;

좋은 웹페이지 즐겨찾기