2011-02-14 92 views
11

我想讀取已經用C#打開的excel文件。我正在使用這種方法,但它不能在Microsoft Excel中打開文件時讀取excel文件。如何在C中讀取打開的excel文件#

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read); 

它給IOException: The process cannot access the file 'myfile.xlsx' because it is being used by another process.

我希望你明白我的意思。我想保持excel文件打開,同時文件在Microsoft Excel中打開,我想從C#中讀取它。我使用C#.NET框架4.0

+3

如果文件是通過其他進程打開的,則不能這樣做 – 2011-02-14 12:21:57

+0

您確定沒有任何方法可以實現此目的嗎? – MonsterMMORPG 2011-02-14 12:35:35

+0

如何:http://support.microsoft.com/kb/316126 – Fionnuala 2011-02-14 12:40:08

回答

6

我認爲你仍然可以複製文件,而excel打開它,所以你可以製作一個文件的副本,然後打開它。只要確保在完成副本後自己清理完畢。

0

以確保文件的是正確的開啓和關閉,請看看使用語句

using (FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read)) 
{ 

} 
+0

你知道我在問什麼嗎?我不想關閉excel,雖然文件是在微軟辦公室excel打開,我想讀它到我的C# – MonsterMMORPG 2011-02-14 12:35:18

0

你可以嘗試File.Open與第四參數使用C# - 文件共享。

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read); 

您可能還需要指定寫訪問權限。

+0

仍然給出了錯誤 – MonsterMMORPG 2011-02-14 13:00:44

3

您可以使用Interop庫來使用已經打開的Excel實例。

oExcel == (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") 
16

你需要與FileShare.ReadWrite打開它:

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 

this answer

0

要在同一時間多次打開同一文件,需要在共享模式下打開。

希望這可以幫助別人。