2017-11-03 1 views
1

StackOverFlow에서 솔루션을 찾을 수없는 작은 문제가 있습니다. 상황 : EXCEL 응용 프로그램이 자동으로 열리는 응용 프로그램이 있습니다. 파일을 열면 "파일 형식과 xxx 확장명이 일치하지 않습니다. 파일이 손상되거나 안전하지 않을 수 있습니다 ..."라는 대화 상자가 나타납니다. 이 실행중인 Excel에 초점을 맞춘 응용 프로그램을 만들려고합니다. "YES"를 누르고 VERSION 2007로 다시 저장하면이 오류 메시지가 다시 나타나지 않습니다. 여기 C# Excel 응용 프로그램 파일 형식 문제

내가 지금까지 무엇을 가지고 :

var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
var c = excelApp.ActiveDialog; 

excelApp 변수를 사용하여 YES에 클릭 이벤트를 할 방법을 잘하지 않습니다. 이것은 내가 지금까지 지금 가지고있는 것입니다 :

 var oExcelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 

     Process[] processlist = Process.GetProcessesByName("Excel"); //Shows number of running Excel apps 
     foreach (Process theprocess in processlist) //foreach Excel app running 
     { 

      if (oExcelApp.Workbooks.Count >= 0) //for worbooks in each Excel app 
      { 
       foreach (Excel.Workbook wkb in oExcelApp.Application.Workbooks) 
       {       
        wkb.SaveAs(filePath, Excel.XlFileFormat.xlExcel8); 
        wkb.Close(true, null, null); 
        Marshal.FinalReleaseComObject(wkb); 
       } 
       oExcelApp.Workbooks.Close(); 
      } 

      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 
      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 

      oExcelApp.Quit(); 
      Marshal.ReleaseComObject(oExcelApp); 
     } 

이 처음에 오류 메시지가 없었다 경우에만 작동 는 또한 2017 11월 6일

foreach (Process proc in Process.GetProcesses()) 
     { 
      if (proc.MainWindowTitle.Contains("Excel")) 
       .... 
     } 

을 시도했다. 프로세스가 자동으로 Excel을 열고 오류 메시지가 표시되면 응용 프로그램이 오류 메시지로 인해 사용 중이므로 예외가 발생합니다.

+0

나는 오류를 가지고,하지만 난 다음에 변경할 때 오류도 전혀 대화를하지 않는 : 그냥 같은 상황에 처해있는 다른 사람을 도울 수 대답을 게시. var excelApp = new Microsoft.Office.Interop.Excel.Application(); var x = excelApp.ActiveDialog; ' – Sjips

+0

오우 죄송합니다. Excel = Microsoft.Office.Interop.Excel을 사용하여 을 사용하고 있습니다. –

+0

XlFileFormat.xlExcel8을 사용하면 .xls 확장명으로 파일을 저장해야합니다. 크리스탈 볼은 .xlsx라는 매우 다른 형식을 사용한다고 말합니다. –

답변

0

감사합니다. 이 문제를 해결하고 REGEDIT를 사용하여 Microsoft Excel 응용 프로그램의 모든 경고를 비활성화 할 수있었습니다. 이것은이 상황을 극복 할 수있는 유일한 방법이었습니다. 내가 코드를하려고 할 때

REGEDIT Solution (Read near the bottom)

0

정확하게 설명하는 방법을 모른다 - 응용 프로그램 내의 대화 상자를 가로 채기.

내가 원하는 것은 Excel이 경고를 일시 중지하도록하는 것입니다. DisplayAlerts 속성을 false로 수정하여이 작업을 수행 할 수 있습니다.

excelApp.DisplayAlerts = true; 
+0

다른 응용 프로그램이 자동으로 EXCEL 응용 프로그램을 열기 때문에 발생합니다. 특정 프로세스가 완료되었습니다.이 프로세스를 실행하기 전에 실행중인 모든 EXCEL 응용 프로그램을 종료 할 수 있지만 특정 프로세스가 완료되면이 프로세스가 트리거되고 경고를 해제하기에는 너무 늦었 기 때문에 경고를 해제 할 수 없습니다. –

0

안녕 당신의 Excel 가까운 경고 상자의 논리를 작성 할 수있는 다른 응용 프로그램을 만들 수 있으며, 메인에서 실행 :이 완료되면

var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
excelApp.DisplayAlerts = false; 

// This should not give you any warnings 
excelApp.Workbooks.Open("c:/cdh/test.xls"); 

, 그들은이었다으로 다시 물건을 넣어

foreach (Process proc in Process.GetProcesses()) 
     { 
      if (proc.MainWindowTitle.Contains("Excel")) 
       .... 
     }, 

응용 프로그램

는 너무 가까이이 경고 상자 사용자 상호 작용, 에 필요하면 데이터베이스에 다른 경고 메시지를 저장하지 않으며이 메시지가 오면 확인하실 수 있습니다 알림 상자에 닫을 수 있습니다.