首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#和ExtendScript用于.incx文件的批处理

C#和ExtendScript用于.incx文件的批处理
EN

Stack Overflow用户
提问于 2016-08-09 17:25:45
回答 1查看 288关注 0票数 0

我有大量的.incx文本文档聚集在它们自己的子文件夹中,我需要迭代它们,并将其转换为纯文本,作为我创建的C# winform应用程序的一部分。我有最新版本的InCopy和ExtendScript工具包,还有一个.jsx脚本,它能很好地安静和快速地创建我的纯文本文件。

我的问题/问题是,在运行中的第三方应用程序中,对于如何在C#类中最好地启动这个程序并没有多少指导,而是发送了相关的信息。当我运行我的.jsx脚本时,我需要从我的应用程序中发送一个目标文件夹,在那里它可以找到.incx文件。

目标文件夹将是动态的,取决于之前在我的应用程序中的其他动作。

我在Adobe的论坛上找到了一些模糊的解决方案,其中包括额外的.vbs文件和/或外部临时文件来保存参数,但它们都很过时,所以我想问问是否有人知道一种当代的方法。如果有什么不清楚的话,我会立即作出回应来澄清。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-10 20:18:43

通过更多的谷歌搜索和我自己的尝试和错误,我找到了我的答案。

我能找到的最好的方法是在VBS中完成我所有的InCopy脚本,然后使用一个流程实例来用cscript发送我的arg。

示例C#:

代码语言:javascript
复制
Process myScriptProc = new Process();
myScriptProc.StartInfo.FileName = @"cscript";
myScriptProc.StartInfo.WorkingDirectory = rootDir + "\\";       // rootDir being the path where my vbs lives
myScriptProc.StartInfo.Arguments = "MyScript.vbs " + filesPath; // filesPath is the arg sent to the script
myScriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myScriptProc.Start();
myScriptProc.WaitForExit();
myScriptProc.Close();

MyScript.vbs

代码语言:javascript
复制
main
Function main() 
    Set myInCopy = CreateObject("InCopy.Application.CC.2015")
    Set obj = CreateObject("Scripting.FileSystemObject")
    myInCopy.ScriptPreferences.UserInteractionLevel = 1699640946    
    myFormat = 1952412773
    myExtension = ".txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    objStartFolder = WScript.Arguments(0)   
    Set objFolder = objFSO.GetFolder(objStartFolder)
    Set colFiles = objFolder.Files
    For Each x In colFiles
    If LCase(objFSO.GetExtensionName(x.name)) = "incx" Then
            thisDoc = x
            Set myDoc = myInCopy.open(thisDoc)
            Set myStory = myInCopy.ActiveDocument.Stories.Item(1)
            parts = split(x.Name, ".")
            myFilePath = objStartFolder & "/" & parts(0) & myExtension  
            myStory.Export myFormat, myFilePath
            myDoc.close()
            obj.DeleteFile(thisDoc)
        End If
    Next
    myInCopy.ScriptPreferences.UserInteractionLevel = 1699311169
End Function

我在VBScript中重写了我的VBScript文件,因为从VBScript论坛上吹来的杂草丛生判断,我永远不会得到任何答案,不知道为什么他们调用DoJavaScriptFile的文档示例会产生对象丢失的方法错误。

我在VB中重做脚本后遇到的最大障碍是,如果在外部运行脚本,则必须对Adobe特定的内容使用超机密枚举十进制值。如果您查看MyScript.vbs,您将看到一些类似随机10位值的实例。这些是从这里来的:

Enum%20Suite.html

祝福那些创建这个资源的家伙,因为我在Adobe的任何文档中都找不到那些信息来挽救我的生命。

TL;DR:如果您试图使用运行在Adobe之外的进程和脚本来实现自动化,可以使用VBScript进行一切操作,并且要小心那些神秘的十进制枚举。

无用的脚注: MyScript.vbs读取目录中传递的所有*.incx文件,导出为普通.txt (具有相同的文件名,放入相同的dir),并删除原始文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38857005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档