2

我希望有人可以帮助我解决这个问题:(我之前已经搜索过其他问题是否适合...)

我正在尝试使用递归 DXL 函数列出特定目录中的所有 DOORS 模块,并将模块名称(完整路径/名称)写入 Excel 表

这是我到现在为止得到的......问题似乎是“z”再次重置为1

在 Excel VBA 中,我像这样调用 DXL 脚本(有效):

objDoorsApp.runStr ("#include <" & sInterface & ">;;createFolderNameForRecursion ()")

它调用一个函数来最初调用递归函数:(也可以)

void createFolderNameForRecursion()
{
int z = 1
WriteAllModulesRecursively2ExistExcel(folder("/00_Platform/30Software/30_Basis_SW/IoStck"), z);
}

这是递归函数:

void WriteAllModulesRecursively2ExistExcel(Folder f, int z) 
{
Item i
Module m
string ausgabe,temp
OleAutoObj  objExcel = oleGetAutoObject("Excel.Application")
OleAutoObj  objBook
OleAutoObj  objSheet = null
OleAutoArgs oleArgs = create
Object  oCur
Module  mCur
bool    excelVisible 
string  sTemp = ""
string  sResult = ""
//int   iRow = 1
string sBookName = "PP_Tst_IT_Report_Template.xls"
string sSheetName = "Delivery"
string result = ""

/* Make Excel visible to the user */
oleGet(objExcel, "Visible", excelVisible) 
if (!excelVisible) olePut(objExcel,"visible",true)

/* Get workbook */
sResult = oleGet(objExcel,"Workbooks", sBookName)

/* Get a handle on Sheet 1 in active workbook */
clear oleArgs
put(oleArgs, sSheetName) 
sResult = oleGet(objExcel, "Sheets", oleArgs, objSheet)

for i in f do 
{

    if (type(i)=="Folder" || type(i) =="Project") {  WriteAllModulesRecursively2ExistExcel(folder(i), z) }
    if (type(i)=="Formal")
    {
        sTemp = fullName i
        if (sTemp!=null)
        {       

            result = z " --> " fullName i "\n"

            objCell = ExcelGetCell(objSheet, z, 1)
            olePut(objCell,"Value",result)

            z++
        }
    } 
}
oleCloseAutoObject (objExcel)
}

就像我说的,如果到达文件夹的“结尾”,“z”将重置为 1。我能做些什么呢?有什么办法吗?

如果我只是说

print fullName i "\n"

它可以工作......但我需要excel表中的模块名称

4

1 回答 1

2

我会尝试将int z = 1您的功能移到外部。如果它在脚本的外层,它将是全局的。您不需要将它传递给函数,它不应该被重置。

例子:

int z = 1

void WriteAllModulesRecursively2ExistExcel(Folder f)
{
  // do something
  z++
}

void createFolderNameForRecursion() {
  WriteAllModulesRecursively2ExistExcel(YOUR_FOLDER)
}

祝你好运!

于 2013-08-02T11:42:06.853 回答