首页 > 解决方案 > 从powershell调用后ImageJ宏没有运行完成

问题描述

这个项目有一堆活动部件一起工作,但我为这篇文章的目的提出了一个最小的工作示例。这是我正在尝试做的事情:

  1. 有一个 powershell 脚本等待在目录中创建 .xlsx 文件
  2. 创建文件时,脚本会启动 imageJ 宏
  3. imageJ 宏要求运行 VBscript
  4. VBscript 要求运行 excel 宏
  5. excel 宏运行后,控制返回到 imageJ 宏,该宏完成并显示一条消息

什么有效:

问题:

我意识到这可能是完成所需任务的最低效的方法,但以下是每个平台的代码片段:

Powershell脚本:

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Users\yourMachine\Desktop"
    $watcher.Filter = "*.xlsx*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$path"
                Clear-content "C:\Users\yourMachine\Desktop\log.txt"
                Add-content "C:\Users\yourMachine\Desktop\log.txt" -value $logline
                cd "C:\Users\yourMachine\Desktop\Fiji.app"
                ./ImageJ-win64 --ij2 --headless --console --run C:\Users\yourMachine\Desktop\Fiji.app\scripts\example.ijm
              }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    while($true) {sleep 5}

ImageJ 宏:

exec("cscript.exe \"C:\\Users\\yourMachine\\Desktop\\example.vbs")

"Hello world!";

脚本:

Option Explicit

example

Sub example()

Dim xlApp
Dim xlBook

Set  xlApp = CreateObject("Excel.Application")   

xlApp.visible = True
set xlBook = xlApp.Workbooks.Open ("C:\Users\yourMachine\Desktop\example.xlsm", 0)
xlApp.Run xlBook.name & "!Module1.addNumbers"
xlApp.Quit

End Sub

Excel宏:

Sub addNumbers()
    ActiveCell.FormulaR1C1 = "1"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "4"
    Range("A5").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("A6").Select
    ActiveCell.FormulaR1C1 = "6"
    Range("A7").Select
    ActiveCell.FormulaR1C1 = "7"
    Range("A8").Select
    ActiveCell.FormulaR1C1 = "8"
    Range("A9").Select
    ActiveCell.FormulaR1C1 = "9"
    Range("A10").Select
    ActiveCell.FormulaR1C1 = "10"
    Range("A11").Select
End Sub

我非常感谢任何关于如何使这项工作/比当前状态更有效率的帮助或见解。我对所有这些语言都是新手,并且不太了解它们之间正在发生的背景对话。谢谢!

标签: excelvbapowershellvbscriptimagej

解决方案


推荐阅读