findExcel加载项库path

我有一个Excel加载项,我试图让自己安装到Excel加载项path。

该加载项可以安装在两个位置之一,在用户configuration文件,或在MS Office安装。

后者是可取的,因为我不想担心系统pipe理员关于新用户login和看不到我的加载项。

然后是find办公室的安装path的问题,有registry项,你可以查看它,但你需要查找的Excel GUID,可以有十几个+排列,从版本,体系结构,msi到点击运行等等(所有这些我都找不到)。 或者是已知的办公室安装path的预定义列表,也是十几个排列组合。

然后是体系结构问题,一个32位的插件不会运行在64位的办公室,反之亦然。

然后有问题的办公室32位可以安装在64位程序文件,谢谢微软!

所以我想出了以下批处理脚本。 我担心有其他的办公室安装path,我不知道…?

我正在尝试与Office 2007 – 2016兼容。

任何我忽略了将非常感激。

干杯

詹姆士

@ECHO off SET FROM=%1 SET FROM=%FROM:"=% ECHO "installed in %FROM%" SET INSTALLED=0 SET XLL_FILEx64=ChiefExcelInterfaceAddIn64-packed.xll SET XLL_FILE=ChiefExcelInterfaceAddIn-packed.xll SET PFx86=%ProgramFiles(x86)% echo "PFx86=%PFx86%" REM "32-bit OS" IF "%PFx86%" == "" ( SET PFx86=%ProgramFiles% ) setlocal EnableDelayedExpansion for %%x in ( "Microsoft Office\Office16" "Microsoft Office\root\Office16" "Microsoft Office 16\root\office16" "Microsoft Office\Office15" "Microsoft Office\root\office15" "Microsoft Office 15\root\office15" "Microsoft Office\Office14" "Microsoft Office\root\office14" "Microsoft Office 14\root\office14" "Microsoft Office\Office12" "Microsoft Office\root\office12" "Microsoft Office 12\root\office12" "Microsoft Office 16\ClientX86\Root\Office16" "Microsoft Office 16\ClientX64\Root\Office16" "Microsoft Office 15\ClientX86\Root\Office15" "Microsoft Office 15\ClientX64\Root\Office15" "Microsoft Office 14\ClientX86\Root\Office14" "Microsoft Office 14\ClientX64\Root\Office14" ) do ( REM echo %%x for %%y in ( "%ProgramW6432%" "%PFx86%" ) do ( SET "foo=%%y\%%x" SET foo=!foo:"=! REM echo !foo! IF EXIST "!foo!\Library" ( ECHO "found it !foo!\Library" REM 64-bit excel.exe file\bin\file "!foo!\excel.exe" | find "PE32+" echo !errorlevel! IF !errorlevel! == 0 ( ECHO COPY /Y "%FROM%\%XLL_FILEx64%" "!foo!\Library" 64-bit COPY /Y "%FROM%\%XLL_FILEx64%" "!foo!\Library" SET INSTALLED=1 ) else ( REM 32-bit excel.exe file\bin\file "!foo!\excel.exe" | find "PE32" echo !errorlevel! IF !errorlevel! == 0 ( ECHO COPY /Y "%FROM%\%XLL_FILE%" "!foo!\Library" 32-bit COPY /Y "%FROM%\%XLL_FILE%" "!foo!\Library" SET INSTALLED=1 ) ) ) ) ) echo %INSTALLED% pause