2013-11-04 9 views
1

다음 코드에서는 Excel 파일이 열려 있는지 확인하려고합니다. 파일을 닫으면 파일을 닫을 때 닫히지 마, 도와 줄 수있어?이미 열려있는 Excel 파일을 닫으면

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 
using Microsoft.Office.Interop.Excel; 
using Excel = Microsoft.Office.Interop.Excel; 

namespace CloseIfFileOpen 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      Excel.Application oApp; 
      Excel.Workbook oBook; 

      oApp = new Excel.Application(); 

      oBook =oApp.Workbooks.Add(@"C:\Users\user\Documents\WEF\Excel\Example.xlsx"); 


      string filePath; 

      filePath = @"C:\Users\user\Documents\WEF\Excel\Example.xlsx"; 


      try 
      { 
       using (File.Open(filePath, FileMode.Open)) { } 
      } 
      catch (IOException e) 
      { 
       var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1); 

       //return errorCode == 32 || errorCode == 33; 
       MessageBox.Show("the file is unavailable now"); 

       oBook.Save(); 
       oBook.Close(); 
       oApp.Quit(); 
      } 
     } 
    } 
} 
+0

도움을 드리고 싶지만 코드를 읽을 수 없습니다. 이름 지정은 끔찍하고 의견도없고 지저분합니다. – Noctis

답변

0

난 내가 네이라면, 파일을 열 수 있으면 그렇게 할 다음 엑셀 시트 경로

로 설정 paramater 패스와 함께 을하지 않을 경우 확인하려면이 방법을 사용하고 있습니다
private Microsoft.Office.Interop.Excel.Application appExcel; 
    private Workbook newWorkbook = null; 
    private _Worksheet objsheet = null; 

    public void excel_init(String path) 
    { 
     appExcel = new Microsoft.Office.Interop.Excel.Application(); 

     if (System.IO.File.Exists(path)) 
     { 
      // then go and load this into excel 
      newWorkbook = appExcel.Workbooks.Open(path, true, true); 
      objsheet = (_Worksheet)appExcel.ActiveWorkbook.ActiveSheet; 
     } 
     else 
     { 
      Console.WriteLine("Unable to open workbook"); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel); 
      appExcel = null; 
     } 

    } 
1

다른 프로세스에서 파일을 사용하고 있는지 확인하고 싶다면 닫으시겠습니까? 창문에서 그렇게 할 수있는 방법이 없다고 생각하기 때문에, 파일 자체를 닫을 수 있습니다. 아마도 Win32 API를 사용하여 파일의 잠금을 해제하는 방법이있을 수 있지만 C#으로 빌드하는 것은 없습니다. 파일에서 close를 호출하면 파일의 사용 만 종료되며 다른 프로세스에는 영향을 미치지 않습니다.

+0

당신은 C#을 내 특정 프로세스를 종료 할 수 있습니다 { \t foreach는 시도 ((Process.GetProcessesByName에서 "이 uTorrent를"프로세스 PROC))를 { proc.Kill(); } } catch (예외 ex) { \t MessageBox.Show (예 : 메시지); } – Baklap4

+0

물론, 실제로 파일을 강제로 푸는 대신 실제 위반 프로세스를 강제 종료해야합니다. 또한 문제가되는 프로세스가 무엇인지 알고 있다고 가정합니다. – Tobberoth

+0

예, 파일이 열려있는 경우 닫고 싶습니다. –

0

파일에 대한 독점적 인 액세스를 원하는 것은 아닙니다. 아마, Excel은 다른 프로세스가 파일을 읽기 모드로 열 수 있도록 파일을 잠그지 않을 것입니다. 어쩌면 당신의 파일 열기 라인이 있어야한다 :

using (File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) { }

0

이 코드는, 확실히, 당신은 확인 중 파일이 열려 여부 도움이 될 것입니다

private bool check_file_oppen(string check) 
    {//where string check is the path of required file 

     try 
     { 
      Stream s = File.Open(check, FileMode.Open, FileAccess.Read, FileShare.None); 
      s.Close(); 
      MessageBox.Show("FILE IS NOT OPEN"); 
      return true; 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("FILE IS OPEN"); 

      return false; 
     } 
    } 

(난 엑셀 파일이 코드를 확인) 이제, "이 파일을 엑셀로 열면 어떻게 닫을 수 있습니까?" 질문입니다. 아직 검색 중입니다 ............

답변을 찾으면 나와 공유하십시오. ...............

고맙습니다.

ARK.

0
 foreach (var process in Process.GetProcessesByName("EXCEL")) 
     { 
      process.Kill(); 
     } 
관련 문제