Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 预先测试xlsxwriter是否能够在Windows下写入目标文件_Python_Excel_Windows_Xlsxwriter - Fatal编程技术网

Python 预先测试xlsxwriter是否能够在Windows下写入目标文件

Python 预先测试xlsxwriter是否能够在Windows下写入目标文件,python,excel,windows,xlsxwriter,Python,Excel,Windows,Xlsxwriter,我编写了一个小程序,在Windows上使用xlsxwriter将相当多的数据转换为Excel工作表,然后在Excel中手动打开以进行进一步分析 如果我已经在Excel中打开了文件,但忘记显式关闭它,xlsxwriter将在权限被拒绝的情况下尝试将内存中的工作表保存到磁盘时失败。我知道这是Windows的行为方式,而不是Linux 我想在我的程序开始时检测到该文件已经在Excel中打开,因此我可以在一段时间后快速失败 如何在Python 3.8.5中检测到这一点?这里有一种方法可以检查文件是否可以

我编写了一个小程序,在Windows上使用xlsxwriter将相当多的数据转换为Excel工作表,然后在Excel中手动打开以进行进一步分析

如果我已经在Excel中打开了文件,但忘记显式关闭它,xlsxwriter将在权限被拒绝的情况下尝试将内存中的工作表保存到磁盘时失败。我知道这是Windows的行为方式,而不是Linux

我想在我的程序开始时检测到该文件已经在Excel中打开,因此我可以在一段时间后快速失败


如何在Python 3.8.5中检测到这一点?

这里有一种方法可以检查文件是否可以在try/except块中创建

为了完整性,它还显示了如何检查文件在创建/关闭时是否可写(这可能更适合您的目的):

导入xlsxwriter
文件名='test.xlsx'
#尝试在循环中打开()文件,以便在出现异常时,例如
#如果文件在Excel中打开,我们可以要求用户关闭该文件。
尽管如此:
尝试:
filehandle=open(文件名“w”)
filehandle.close()
例外情况除外,如e:
决策=输入(“无法打开文件:%s\n”
“如果文件在Excel中打开,请将其关闭。\n”
“是否再次尝试写入文件?[Y/n]:%e)
如果决定n':
持续
其他:
出口
打破
工作簿=xlsxwriter.工作簿(文件名)
工作表=工作簿。添加工作表()
工作表。写('A1','Hello world')
#尝试在循环中关闭()文件,以便捕获异常。
#请注意XlsxWriter特定的异常。
尽管如此:
尝试:
工作簿.关闭()
除了xlsxwriter.exceptions.FileCreateError作为e:
decision=input(“工作簿中捕获异常。关闭():%s\n”
“如果文件在Excel中打开,请将其关闭。\n”
“是否再次尝试写入文件?[Y/n]:%e)
如果决定n':
持续
打破

注意,这种方法引入了一个潜在的错误,但对于一个简单的用例来说,这可能不是问题。

现在这解决了我的问题:这很好,但对我的问题来说是一个非常过分的解决方案。“只是有一个例外就失败”很好——我只希望它发生在前面,而不是在写作最终发生的时候。