2017-02-27 69 views
-2

當它已經打開時是否可以關閉excel文件?我已經編寫了一個代碼,可以確定某個特定的excel文件是否已經打開,但是一旦它被確定爲打開,我無法關閉該文件。我曾嘗試以下方法(見下文),關閉工作簿和Excel應用程序:如何在已經打開的時候自動關閉特定的excel文件(不殺死excel)?

// The name of my workbook is "workbook", while the Excel application is named "excel."
workbook.Close(true); excel.Quit();

執行後的代碼不會關閉已打開的Excel窗口。這也可能有助於知道我使用,以確定文件是否打開(這是下面提供)代碼:

// The following checks to see if a file is open and returns truth1 as "true" if the file is open and "false" if the file is closed. 
file = new FileInfo(file_name); 
truth1 = IsFileinUse(file); 
// ... 
protected static bool IsFileinUse(FileInfo file) 
    { 
     FileStream stream = null; 

     try 
     { 
      stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
     } 
     catch (IOException) 
     { 
      return true; 
     } 
     finally 
     { 
      if (stream != null) 
       stream.Close(); 
     } 
     return false; 
    } 

同樣,我不能創建一個程序中,我「殺創先爭優」。我只需要知道如何關閉已打開的Excel窗口,如果它的路徑與我正在嘗試讀取和寫入的路徑相同。

+0

你已經試過這個嗎? http://stackoverflow.com/questions/22971269/closing-an-open-excel-workbook-in-c-sharp –

+0

.close()命令不關閉已打開的文件;這就是我在這個主題上找到的所有解決方案(包括剛推薦的解決方案)中主要關注的內容。 –

+0

[關閉Excel工作簿]的可能重複(http://stackoverflow.com/questions/17440138/closing-an-excel-workbook) –

回答

0

請對下面的示例代碼來看看: -

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Application exl = new Excel.Application(); 

# open a file 
Excel.Workbook wbook = exl.Workbooks.Open("some_file.xlsx"); 

# To close the file 
wbook.Close(); 

exl.Quit(); 

編輯1: -

如果您可以參考以下鏈接上述解決方案不適合你: -

Closing an Excel Workbook

+0

.Close()和.Quit()命令**不會關閉已打開的Excel文件。**我想關閉已打開的文件。 –

0

您可以使用Windows API通過標題關閉某個窗口。

這將調出窗口關閉,所以它會提示用戶是否真的要關閉:

using System.Runtime.InteropServices; 

... 

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); 

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 

const UInt32 WM_CLOSE = 0x0010; 

然後

IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "MyFile.xlsx - Excel"); 
if (windowPtr == IntPtr.Zero) 
{ 
    MessageBox.Show("Document not open"); 
    return; 
} 

SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 

如果您需要強制關閉,甚至如果該文件已被修改,則只能殺死相關的excel進程。但請記住,如果它們在同一個excel-process-instance中運行,這將強制殺死其他excel-windows。

using System.Diagnostics; 
    ... 
    Process[] processes = Process.GetProcesses(); 

    foreach (Process p in processes) 
    { 
     if (p.MainWindowTitle == "MyFile.xlsx - Excel") 
     { 
      p.Kill(); 
      break; 
     } 
    } 
+0

是否有辦法在不提示用戶的情況下關閉Excel窗口,而不殺掉Excel。謝謝您的幫助。 –

相關問題