InstallShield脚本语言的编写

InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加。
    一.基本语法规则
     1.变量
     BOOL 布尔型 值为TRUE(1)或FALSE(0)
     CHAR 字符型 一字节长的(8bit)的字符
     HWND 窗口句柄 用来存放窗口句柄
     INT 整型 两字节长的整数
     LIST 列表型 指向InstallShield列表,用ListCreate和ListDestroy
     LONG 扩展数值型
     LPSTR 扩展指针
     NUMBER 数值型 存放四字节长的数值,范围从-2147483648到+2147483647
     POINTER 指针型
     SHORT 短数值型
     STRING 字符串型 十分类似VC中的LPCTSTR
     变量如同标准的C语言,在使用前需要事先声名。变量通常在两个位置进行声名,一是主程序外部,这样的变量为全局变量,二是各函数的变量声名区,这样的变量是局部变量。
    
    
     2.操作符
     一般的与C语言相同操作符,在这里不做详解,以下主要介绍比较特殊的操作符,
     (1) + , - , * , /
     以上四个操作符与C语言中意义和用法都相同。
    
     (2) &&
     与操作,与C语言中用法相同,例:x1 && x2
    
     (3) ||
     或操作,与C语言中用法相同,例:x1 || x2
    
     (4) !
     非操作,与C语言中用法相同,例:!x1
    
     (5) *
     指针操作,类似C语言中的*
    
     (6) & , | , ^ , ~ , << , >>
     分别为位与,位或,按位异或,按位取反,左移和右移,其意义和用法都与C语言中基本相同。
    
     (7) .
     该操作符用于结构,用来得到结构的子项,与Delphi的 . 用法类似,例如:
     typedef SETTINGSREC
     begin
     BOOL bSwitchOn;
     STRING szMssg[255];
     INT nVal;
    
     end;
     SETTINGSREC settings;
    
     program
     settings.bSwitchOn = FALSE;
     settings.szMssg = "Off";
     settings.nVal = 0;
     (8) =
     既可作为赋值号,同时也做等于符,例如:
     str1 = "String";
     if str1="String" then
     endif;
    
     (9) &
     取地址符,与C语言用法类似。
    
     (10) < , > , = , <= , >= , !=
     分别表示小于,大于,等于,小于等于,大于等于,不等于
    
     (11) + , ^ , %
     用于字符串的操作。
    
     (12) ->
     结构指针,与C语言中用法类似。
    
     (13) @
     用于得到Resource窗口中定义的字符串,例:
     szReferenceFile = svDir ^ @PRODUCT_KEY;
    
    
     3.函数
     InstallShield的函数使用前同样需要声名,函数的参数传递方式十分类似C语言,例如下面的函数声名:
     prototype HandleMoveDataError( NUMBER );
    
    该声名中函数名为HandleMoveDataError,传递一个NUMBER类型的参数。调用该函数时也基本与C语言中相同。
     函数体的标准格式为:
    function functionname(nResult)
    // 函数变量声名区
    begin
    // 程序区
    end;
    通常的函数返回一个NUMBER型的数。
    
     4.主程序结构
     主程序以program开始,以endprogram结尾,
    
    
    二.框架程序的基本结构
     程序开始为函数与变量的声明区
     通过向导建立的框架程序包含以下一些主函数:
     prototype ShowDialogs();
     // 显示安装向导对话框
    
     prototype MoveFileData();
     // 移动文件数据
    
     prototype HandleMoveDataError( NUMBER );
     // 移动数据出错处理
    
     prototype ProcessBeforeDataMove();
     // 移动文件数据前的处理
    
     prototype ProcessAfterDataMove();
     // 移动文件数据后的处理
    
     prototype SetupRegistry();
     // 安装注册,用户可在此加入一些代码,通常用于对注册表的操作
    
     prototype SetupFolders();
     // 安装生成快捷方式,通常用户可在此加入生成快捷方式的代码
    
     prototype CleanUpInstall();
     // 安装完成后清除临时文件
    
     prototype SetupInstall();
     // 安装的实际过程
    
     prototype SetupScreen();
     // 设置安装过程的屏幕显示(包括背景颜色,字体等)
    
     prototype CheckRequirements();
     // 检查安装需求(包括硬盘空间,操作系统平台等)
    
     prototype DialogShowSdWelcome();
     // 显示“欢迎”对话框窗口
    
     prototype DialogShowSdLicense();
     // 显示许可信息的对话框
    
     prototype DialogShowSdRegisterUserEx();
     // 显示用户安装注册的对话框
    
     prototype DialogShowSdAskDestPath();
     // 显示“安装路径选择”对话框
    
     prototype DialogShowSdSetupType();
     // 显示“安装类型选择”对话框
    
     prototype DialogShowSdComponentDialog2();
     // 当用户选择“定制”安装时,用于显示供用户选择的组件的对话框
    
     prototype DialogShowSdSelectFolder();
     // 显示快捷方式文件夹选择的对话框
    
     prototype DialogShowSdFinishReboot();
     // 显示“安装完成重启动”对话框
    
    
    编程实例:
    1.怎样在进度条左上角显示当前安装的文件
     在function SetupScreen()中加入以下语句
     Enable( INDVFILESTATUS );
    
    2.怎样改变窗口背景色
     SetColor( BACKGROUND, **** )函数可以改变窗口背景色,在适当的位置加上它即可,其中第二个变量可 以为以下值:
     BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW
     BK_GREEN BK_ORANGE BK_RED
     以上几种为渐变色
     BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED
     BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE
     BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW
     同时第二个参数也可以用RGB来描述,如SetColor( BACKGROUND, RGB(0,0,255) )
    
    3.怎样在InstallShield5.0以下版本建立快捷方式
     在InstallShield5.1以上版本可以可以在Resource窗口中建立,而在以前的版本必须用程序解决该问题, 如果现在有一文件RegPad.exe(安装路径为用户选定的),给该程序在“开始”->“程序”中加一个快捷 方式,具体实现程序如下:
     function SetupFolders()
     NUMBER nResult;
     STRING svResult,szCommand;
     STRING szName;
    
     begin
     szName = "RegPad.exe";
     szCommand = TARGETDIR ^ szName ;
     LongPathToQuote ( szCommand , TRUE );
     AddFolderIcon ( FOLDER_PROGRAMS ^"RegPad1.0Beta","RegPad" ,
     szCommand , TARGETDIR , "" , 0 , "" , REPLACE );
    
    4.怎样控制用户序列号
     在向导生成的框架程序中,定义了一个STRING型的全局变量svSerial,在SdRegisterUserEx()结束时将给 该值赋上用户输入的序列号,你对该变量进行判断即可。
    
    5.怎样控制重新启动计算机
     只需加入以下语句
     System ( SYS_BOOTWIN );
    
    6.怎样给Autoexec.bat或Config.sys加入语句
     以下程序给Autoexec.bat加入一行语句
     OpenFileMode ( FILE_MODE_APPEND );
     OpenFile (nvFileHandle, "C://", "Autoexec.bat");
     WriteLine ( nvFileHandle , "SET PATH=%PATH%;C://ORAWIN95//BIN" );
    
    7.怎样在安装结束时允许用户选择是否打开Readme文件
     假定Readme.txt文件已经复制到目标路径,以下程序将显示一个复选框,如果用户选择了,则用记事本打 开Readme.txt。
     function DialogShowSdFinishReboot()
     NUMBER nResult, nDefOptions;
     STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szPathls;
     NUMBER bOpt1, bOpt2;
    
     begin
     if (!BATCH_INSTALL) then
     bOpt1 = TRUE;
     bOpt2 = FALSE;
     szMsg1 = "";
     szMsg2 = "";
     szOption1 = "阅读Readme文件";
     szOption2 = "";
     nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );
    
     if bOpt1 = TRUE then
     CopyFile ( "Readme.txt" , "Readme.txt" );
     LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"Readme.txt" );
     endif;
    
     return 0;
     endif;
     ..........
    
    8.如何指定默认路径
     在function SetupInstall()中修改以下代码,如默认目录改为C:/JttMis,见以下修改的代码
     if (bIs32BitSetup) then
     svDir = WINDISK ^ "Jttmis";
     else
     svDir = WINDISK ^ "Jttmis"; // use short names
     endif;
    
     TARGETDIR = svDir; 

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1265158
 

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值