- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MATLAB 写入包含宏的 Excel 文件,然后重新评估文件并使用 xlsread
提取宏结果.该代码仅适用于一名 worker 。但是,如果我使用 parfor
并使用第二个工作人员,MATLAB 给出如下错误消息。严格来说,我为第二个 worker 创建了第二个 Excel 文件并使用 t = getCurrentTask(); t.ID;
指导 worker 处理他们安排好的 Excel 文件。
Error using xlswrite (line 226)
Invoke Error, Dispatch Exception: Source: Microsoft Excel Description: Microsoft Excel cannot access the file 'C:\Users-----\D0481000'. There are several possible reasons: • The file name or path does not exist. • The file is being used by another program. • The workbook you are trying to save has the same name as a currently open workbook. Help File: xlmain11.chm Help Context ID: 0
Error in extractFromExcelExpress (line 249) xlswrite(filename,writtenIn,sheet,'B23');
最佳答案
这听起来像是由多个需要独占访问同一文件的进程引起的典型竞争条件问题。基本思想是当另一个进程试图打开文件时,一个进程仍未关闭文件,并且有时您只会收到错误,因为这些问题并不总是发生(另见:Heisenbug)。
以下是一些关于您可以做什么的建议(按对我来说有意义的降序排列):
xlswrite
parfor
之外的代码.如果您在保持 parfor
的同时难以实现此功能,只需将所有中间结果保存到工作区变量,并在计算完成后将其写入磁盘。 xlswrite1
中相同的方法在进程之间共享 ActiveX 对象(我从未尝试过,也不能确定是否可行)。 .本质上,它不会尝试在写入之间打开和关闭文件,因此一个进程仍未关闭它而另一个尝试打开它的情况不会发生。 Workbook.MultiUserEditing
的方法属性(property)。这可能与之前的建议有关。 xlswrite
带有 while true, try, xlswrite(...); break; catch, pause(0.01); end, end
的语句.这会减慢代码的速度,但至少它最终会完成。 关于excel - 从并行循环中访问 Excel 工作簿时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585025/
我是一名优秀的程序员,十分优秀!