gpt4 book ai didi

excel - 从并行循环中访问 Excel 工作簿时出错

转载 作者:行者123 更新时间:2023-12-04 20:54:17 25 4
gpt4 key购买 nike

我正在使用 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');



这是随机发生的。我确实尝试更改 excel 文件的文件夹,它开始工作了几个小时,但最终停止了。我确实清除了 Excel 中的所有加载项,并将相应的文件夹放入了 Excel 信任位置。
  • Excel 版本:2016
  • MATLAB版本:R2017a
  • 最佳答案

    这听起来像是由多个需要独占访问同一文件的进程引起的典型竞争条件问题。基本思想是当另一个进程试图打开文件时,一个进程仍未关闭文件,并且有时您只会收到错误,因为这些问题并不总是发生(另见:Heisenbug)。

    以下是一些关于您可以做什么的建议(按对我来说有意义的降序排列):

  • 尝试重新设计代码,使一次只有一个进程访问(读取 写入)文件。这称为“critical section”。在 MATLAB 中实现此目的的最简单方法是使用 xlswrite parfor 之外的代码.如果您在保持 parfor 的同时难以实现此功能,只需将所有中间结果保存到工作区变量,并在计算完成后将其写入磁盘。
  • 您可以使用与 xlswrite1 中相同的方法在进程之间共享 ActiveX 对象(我从未尝试过,也不能确定是否可行)。 .本质上,它不会尝试在写入之间打开和关闭文件,因此一个进程仍未关闭它而另一个尝试打开它的情况不会发生。
  • 找到使用 Workbook.MultiUserEditing 的方法属性(property)。这可能与之前的建议有关。
  • 使用可用的最快存储空间。您可以使用 RAM drive ,然后将您的 Excel 文件放在那里,这样您至少可以避免使用网络驱动器、HDD 甚至 SSD 导致的任何缓慢。
  • 如果一切都失败了,请包围 xlswrite带有 while true, try, xlswrite(...); break; catch, pause(0.01); end, end 的语句.这会减慢代码的速度,但至少它最终会完成。
  • 关于excel - 从并行循环中访问 Excel 工作簿时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585025/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com