【问题标题】:Opening an excel file with opn while another excel file is open, will execute code immediately without waiting打开另一个excel文件时用open打开一个excel文件,将立即执行代码,无需等待
【发布时间】:2018-01-18 03:05:07
【问题描述】:

我正在使用一个名为 opn 的库。这使得在 electron 的主进程中生成子进程来打开文件变得更加容易。我可以使用 shell,但我需要能够检测文件何时关闭,哪个 shell API 没有提供。

每当我打开一个 excel 文件并且没有打开其他 excel 文件时,它都会正常工作,它会等到我关闭文件后才解决承诺。但是,如果打开了其他 excel 文件,则它不会等待文件关闭,它会立即解决 promise。

我在库的源代码中进行了一些挖掘,用于打开文件的命令是 Windows:start "" /wait name_of_file 其中 name_of_file 是文件的占位符。库执行的实际命令不同,但这对于我的用例来说已经足够了。即使在不使用库的情况下手动执行,我也遇到了同样的问题。也许我应该在超级用户而不是 stackoverflow 下发布这个。

这里是打开文件的代码,等待文件然后执行回调。

opn(file, { app: 'EXCEL', wait: true }).then(() => {
  const stream = fs.createReadStream(file);
  papa.parse(stream, {
    delimiter: ',',
    complete: (results) => {
      mainWindow.webContents.send('uploadNewIndexFileRen', key,
        results.data);
    },
    error: (err) => {
      throw err;
    }
  });
}).catch((error) => { throw error; });

更新:

这是一个快速的 nodejs repo。您需要做的就是克隆/分叉来检查问题或发出拉取请求,然后执行 npm install 以下载所需的包。要重现我遇到的确切问题,您可能需要使用以下软件版本:

  • 窗口 10
  • npm 5.5.1
  • 节点 v8.9.1
  • Excel 2013
  • 在 package.json 中看到的 opn 5.2.0

【问题讨论】:

    标签: node.js electron


    【解决方案1】:

    这可能与 Excel 处理文件的方式有关。我猜 Excel 使用单个进程处理文件,因此随后打开文件只是向现有进程发出信号,即在关闭之前需要打开另一个文件。

    您可以通过关注these instructions 来强制 Excel 为每个文件打开一个新实例。

    显然使用/x命令行开关也会启动一个新进程:

    excel.exe /x
    

    【讨论】:

    • 是的,Excel 似乎为所有文件生成了一个进程。有没有办法让它只检测某个文件?
    • 我试过但没有用。我做了start /wait name_of_file excel.exe /x。仍然立即退出
    • 我想您必须在文件系统中找到 excel.exe 并像示例中一样调用它:c:\path\to\excel.exe /x name_of_file.xls
    • 问题是,excel 2013 及更高版本默认启动一个新实例。但是,所有实例都在同一进程下。 /x 似乎启动了一个新实例而不是一个新进程
    • 在单独的窗口中打开它们后,您可以使用winctl 库来跟踪窗口吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2016-02-22
    相关资源
    最近更新 更多