C# 中Excel导入时判断是否被占用三种方法

下面是详细讲解 "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.ApplicationExcel.WorkbookSystem.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技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • bootstrap table 多选框分页保留示例代码

    如果想要在bootstrap table中加入多选框并且保留在分页时的选定状态,可以按照以下步骤进行操作: 首先要在table的html代码中加入一个input元素作为多选框,示例代码如下: “` 姓名 性别 年龄 城市 张三 男 28 北京 李四 女 25 上海 王五 男 30 广州 “` 其中,第一个th元素中的input元素作为全选多选框,后面的每…

    Java 2023年6月16日
    00
  • Mybatis批量插入数据的两种方式总结与对比

    我会为您提供一个详细的攻略,以讲解 Mybatis 批量插入数据的两种方式,分别是 foreach 方式和 batch 方式。 1. foreach 方式 foreach 方式是通过迭代集合或数组的方式来实现批量插入数据的。示例如下: 1.1 示例 <insert id="batchInsert"> insert into t…

    Java 2023年5月20日
    00
  • Spring bean 四种注入方式详解

    Spring bean 四种注入方式详解 在 Spring 框架中,我们可以通过不同的方式来注入 bean,包括构造函数注入、setter 方法注入、接口注入和注解注入。这篇文章将详细介绍这四种注入方式以及它们的优缺点。 构造函数注入 构造函数注入是指使用构造函数来注入依赖关系。在使用这种方式时,我们需要在 bean 的 XML 配置文件中使用 constr…

    Java 2023年5月31日
    00
  • JAVA验证码工具实例代码

    JAVA验证码工具实例代码完整攻略 验证码是一种用来区分人类和计算机的一种技术,通常应用于网站注册、登录等场景中。在JAVA中,我们可以借助一些工具来实现验证码的生成和验证,下面我们就来了解一下。 验证码工具的选择 JAVA中有很多开源的验证码工具,常见的有Kaptcha、JCaptcha等。这里我们介绍一种比较常用的JAVA验证码工具——JCaptcha。…

    Java 2023年6月15日
    00
  • 浅谈java中math类中三种取整函数的区别

    下面是我对题目“浅谈java中math类中三种取整函数的区别”的详细攻略: 1. 引言 Java中的Math类提供了很多用于数值计算的方法。本文将重点讲解Math类中的三种取整函数的区别:round、ceil和floor。这三个函数的共同点是,它们都返回近似值且返回类型为整数。它们的不同之处将在下文中进行详细比较。 2. Math类中的三种取整函数 2.1 …

    Java 2023年5月26日
    00
  • 用java实现冒泡排序算法

    以下是用Java实现冒泡排序算法的完整攻略: 冒泡排序算法简介 冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。重复地进行直到没有任何一对数字需要比较,即所有的数字按照从小到大(或从大到小)排序完成。 冒泡排序算法步骤 首先,比较相邻的两个元素,如果前面的元素大于后面的元素,就交换这两个元素的位置; …

    Java 2023年5月19日
    00
  • 分享几个WebSite网站防黑经验

    当今WebSite网站防黑成为了一个非常重要的话题,因为黑客攻击不断增多,如果不及时采取一些安全防范措施,那么就有可能会造成严重的后果,比如用户信息泄露、系统瘫痪、服务不可用等。下面为大家分享几个WebSite网站防黑经验,希望对大家有所帮助。 防御措施1:保持WebSite网站系统更新 在WebSite网站防黑的过程中,系统更新非常重要,因为黑客们对各种漏…

    Java 2023年6月15日
    00
  • jsp中点击图片弹出文件上传界面及实现预览实例详解

    本文将会详细讲解“jsp中点击图片弹出文件上传界面及实现预览实例详解”的完整攻略。该攻略主要分为两个步骤:实现图片点击上传以及实现图片预览。下面我将分别讲解这两个步骤的具体实现。 实现图片点击上传 对于实现图片点击上传,我们需要用到一个比较流行的JS插件:webuploader。具体实现步骤如下: 1. 引入webuploader库 在jsp页面中引入web…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部