VFP如何判断Excel表是否有密码保护
我处理好多单位的Excel表,有的没有密码,有的打开时需要密码,请问VFP如何在打开Excel表前检查出那些表是需要密码的,那些是不需要密码的?
回复 楼主 fnlsgjb
这些文件中,凡有密码的文件,是否具有相同的密码?
CLOSE DATABASES ALL CLEAR ALL DIMENSION f0[2] as String LOCAL i as Integer LOCAL ox as Object CREATE CURSOR OpenPswdErr(filename c(240)) && 用于记录哪些文件未能打开。 F0[1]="C:\样机寄售库存.xlsx" && 假定某文件夹下的文件名已经获取,保存在数组f0中, F0[2]="C:\样机寄售库存123456.xlsx" && 其中这个文件是需要密码的。 ox=CREATEOBJECT('Excel.Application') FOR i=1 TO ALEN(F0) TRY ox.Workbooks.Open(F0[i],,,,654321) && 用密码654321打开Excel,若文件本身无密码,本句也不会报错。 * 如果用这句:ox.Workbooks.Open(f0[i]) ,则遇到含密码的文件时,会弹出令人不快的对话框。 * 故无论文件本身有无密码,利用“若文件本身无密码,本句也不会报错。”的特性,我们均用上句去打开他。 IF ox.ActiveWorkbook.Sheets.Count>0 THEN MESSAGEBOX('Open Successful') ELSE MESSAGEBOX('Open Error!') ENDIF CATCH TO errmsg IF errmsg.ErrorNo<>1429 THEN && 记录其它错误, MESSAGEBOX('错误号:' + STR(errmsg.ErrorNo) + CHR(10) + ; '错误信息:' + errmsg.Message + CHR(10) + ; '程序行号:' + STR(errmsg.LineNo) + CHR(10) + ; '出错过程:' + errmsg.Procedure + CHR(10) + ; '出错语句:' + errmsg.LineContents) ELSE INSERT INTO OpenPswdErr (filename) VALUES (F0[i]) && 如果未正常打开,则追加进记录中。 ENDIF FINALLY ox.quit ENDTRY ENDFOR IF RECCOUNT('OpenPswdErr')>0 THEN SELECT OpenPswdErr BROWSE TITLE '因密码错误,未能打开的文件:' ELSE USE IN OpenPswdErr ENDIF