下面是详细讲解 "C# 中 Excel 导入时判断是否被占用三种方法" 的完整攻略。
一、需求说明
在使用 C# 程序导入 Excel 数据时,可能会遇到一个问题,即当 Excel 文件正在被其他程序占用时,程序无法正确读取数据。因此我们需要通过一些方法判断 Excel 文件是否被其他程序占用。
二、方法一
第一种方法是通过 try...catch
来判断 Excel 文件是否被占用。
using Excel = Microsoft.Office.Interop.Excel;
// 判断 Excel 文件是否被占用
public bool IsExcelFileLocked(string fileName)
{
bool fileLocked = false;
Excel.Application excel = null;
Excel.Workbook workBook = null;
try
{
excel = new Excel.Application();
workBook = excel.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
catch (System.Runtime.InteropServices.COMException ex)
{
fileLocked = true;
Console.WriteLine(ex.Message);
}
finally
{
if (workBook != null) workBook.Close(false, Type.Missing, Type.Missing);
if (excel != null) excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
workBook = null;
excel = null;
}
return fileLocked;
}
上述代码中,我们使用了 Excel.Application
、Excel.Workbook
、System.Runtime.InteropServices.COMException
等类来打开 Excel 文件,并通过捕捉 COMException
异常来判断文件是否被占用。
三、方法二
第二种方法是通过使用 "Exclusive Access" 来判断 Excel 文件是否被占用。
using Excel = Microsoft.Office.Interop.Excel;
// 判断 Excel 文件是否被占用
public bool IsExcelFileLocked(string fileName)
{
bool fileLocked = false;
Excel.Application excel = null;
Excel.Workbook workBook = null;
try
{
excel = new Excel.Application();
workBook = excel.Workbooks.Open(fileName, Type.Missing, true, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
workBook.Close(false, Type.Missing, Type.Missing);
}
catch (System.Runtime.InteropServices.COMException ex)
{
fileLocked = true;
Console.WriteLine(ex.Message);
}
finally
{
if (workBook != null) workBook = null;
if (excel != null) excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
excel = null;
}
return fileLocked;
}
上述代码中,我们将 excel.Workbooks.Open()
方法的第三个参数设为 true
,可以强制以 "Exclusive Access" 模式打开 Excel 文件,然后再关闭,如果文件未被占用,则可以关闭文件。如果文件被占用,则会抛出 COMException
异常。
四、方法三
第三种方法是使用 FileStream
对象来检测 Excel 文件是否被占用。
using System.IO;
// 判断 Excel 文件是否被占用
public bool IsExcelFileLocked(string fileName)
{
bool fileLocked = false;
try
{
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
// Do nothing
}
}
catch (IOException)
{
fileLocked = true;
}
return fileLocked;
}
上述代码中,我们使用 FileStream
类来打开 Excel 文件,并设置 FileShare.None
,如果文件已被占用,则会抛出 IOException
异常。
以上就是三种判断 Excel 文件是否被占用的方法及其代码示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 中Excel导入时判断是否被占用三种方法 - Python技术站