【python】Excel文件如果没有关掉,openpyxl操作的时候会有这个报错:PermissionError: [Errno 13] Permission denied: ‘output.xls

需求:

Excel文件如果没有关掉,openpyxl操作的时候会有这个报错:PermissionError: [Errno 13] Permission denied: ‘output.xlsx’,怎么能检测有没有关掉,并让其自己关掉呢,代码实现

分析与解决

如果 Excel 文件已经被其他程序打开并且正在使用,我们无法使用 openpyxl 模块读取或写入文件内容。为了避免出现 PermissionError 异常,我们可以使用 try-except 语句捕获异常,并在发生异常时关闭 Excel 文件。

以下是一个检测 Excel 文件是否被其他程序打开的函数,如果文件正在使用,则关闭文件:

import psutil
import os

def close_excel_file(file_path):
    for proc in psutil.process_iter():
        try:
            for item in proc.open_files():
                if item.path == os.path.abspath(file_path):
                    proc.kill()
        except:
            pass

在这个函数中,我们使用 psutil 模块来获取当前正在运行的进程列表,然后遍历每个进程的打开文件列表,如果找到了指定的 Excel 文件,则通过 proc.kill() 方法关闭该进程。

在主程序中,我们可以在打开 Excel 文件之前检查它是否已经被其他程序打开。如果文件已经被打开,则关闭文件。以下是一个完整的代码示例:

import psutil
import os
from openpyxl import Workbook

# 检测 Excel 文件是否被其他程序打开并关闭文件
def close_excel_file(file_path):
    for proc in psutil.process_iter():
        try:
            for item in proc.open_files():
                if item.path == os.path.abspath(file_path):
                    proc.kill()
        except:
            pass

# 创建 Excel 文件
def create_excel_file():
    file_path = "output.xlsx"
    try:
        # 检查 Excel 文件是否已经被打开,如果是则关闭文件
        close_excel_file(file_path)
        # 创建工作簿
        wb = Workbook()
        # 选择第一个工作表
        ws = wb.active
        # 写入数据...
        # 保存文件
        wb.save(filename=file_path)
    except Exception as e:
        print("Error:", e)

# 测试代码
create_excel_file()

在这个示例中,我们首先定义了一个 close_excel_file 函数来检测 Excel 文件是否被其他程序打开,并在文件已经被打开时关闭文件。然后,在 create_excel_file 函数中,我们使用 try-except 语句来捕获 PermissionError 异常,并调用 close_excel_file 函数来关闭文件。最后,我们可以在主程序中调用 create_excel_file 函数来测试代码。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当出现"PermissionError: [Errno 13] Permission denied"错误时,这意味着你的程序在尝试访问或操作一个文件或目录时被拒绝了权限。这通常是由于操作系统对文件或目录的访问权限设置所致。 解决这个问题的第一步是确认你对该文件或目录是否具有足够的访问权限。你可以右键点击该文件或目录,选择属性,并查看其属性状态。确保你取消了只读选项,然后点击确定。 如果你仍然遇到相同的错误,请检查文件或目录所在的文件夹是否具有正确的权限。你可能需要以管理员身份运行程序或者联系系统管理员以获取相应的权限。 另外,有时这个错误可能是由于其他正在使用该文件或目录的进程导致的。在这种情况下,你可以尝试关闭其他程序或进程,然后再次运行你的程序。 如果你在处理气象数据时遇到了"PermissionError: [Errno 13] Permission denied: '/output'"错误,请确保你具有对该目录的写入权限。你可以通过右键点击该目录,选择属性,并查看其属性状态来确认。如果需要,取消只读选项并点击确定以更改权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python报错PermissionError: [Errno 13] Permission denied](https://blog.csdn.net/weixin_44630029/article/details/118021429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都吴所谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值