Как читать открытый файл Excel на C # - PullRequest
13 голосов
/ 14 февраля 2011

Я хочу прочитать уже открытый файл Excel с C #.Я использую этот метод, но он не может прочитать файл Excel, пока файл открыт в Microsoft 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 Framework 4.0

Ответы [ 6 ]

20 голосов
/ 20 февраля 2012

Вам нужно открыть его с помощью FileShare.ReadWrite:

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

См. этот ответ .

6 голосов
/ 14 февраля 2011

Я думаю, что вы все еще можете копировать файл, пока в Excel он открыт, поэтому вы можете сделать копию файла и затем открыть его. Просто позаботьтесь о себе, когда закончите с копией.

3 голосов
/ 14 февраля 2011

Вы можете использовать библиотеку Interop для использования уже открытого экземпляра Excel.

oExcel == (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")
0 голосов
/ 29 октября 2012

Чтобы открыть один и тот же файл более одного раза одновременно, его необходимо открыть в режиме общего доступа.

Надеюсь, что это может помочь другим.

0 голосов
/ 14 февраля 2011

Вы можете попробовать File.Open с четвертым параметром - fileShare.

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

Возможно, вам также потребуется указать права на запись.

0 голосов
/ 14 февраля 2011

Чтобы убедиться в правильности открытия и закрытия файла, посмотрите на использование c # с помощью операторов

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

}
...