2012-05-15 2 views
0

엑셀 추가 기능을 개발 중입니다. 일련 번호 (예 : 100 psc)가 있으며 PC에 추가 기능을 설치할 때 Excel에서 확인하고 싶습니다. 하지만 VS2010 설치 프로젝트에서는 일련 번호 목록 저장 및 확인을 지원하지 않기 때문에이 작업을 수행 할 수 없습니다.설치 팩토리가있는 2010 추가 기능 설치 프로젝트를 능가하십시오.

은 그래서 설정 공장이 작업을 수행 할 수 나는이 링크처럼 한 : link

하지만 문제 엑셀있다; enter image description here

"예"를 선택하면 "아니오"를 선택하면 .dll을 열 수 있습니다.

enter image description here

이처럼 내 설치 공장의 목록입니다. enter image description here

내 설정 공장 "게시물에 설치 스크립트는"내 Addinfilename의 값은 자동화 추가 기능을 구축하고있다처럼

-- Determine registry key (2 = HK CURRENT USER) 
sVersions = Registry.GetKeyNames(2, "Software\\Microsoft\\Office"); 

-- Iterate through the registry keys per MS Office-version 
--Next line has SetupFactory 8 code 
--for iCount1, sVersion in sVersions do  
for iCount1, sVersion in pairs(sVersions) do  

    -- Try opening the registry key 
    sSubKey = "Software\\Microsoft\\Office\\"..sVersion.. 
       "\\Excel\\Options\\" 
    sValues = Registry.GetValueNames(2, sSubKey); 

    --initialize index counter 
    iIndex = -2 
    if sValues then 

     --Determine the index of the maximimum OPEN registry entry 
     --Next line has SetupFactory 8 code 
     --for iCount2, sValue in sValues do 
     for iCount2, sValue in pairs(sValues) do 

      if (String.Left(sValue, 4) == "OPEN") then    
       --Check whether the user did not already install 
       --the same add-in to prevent errors when opening Excel 
       sKeysValue = Registry.GetValue(2, sSubKey, sValue, true) 
       if String.Find(sKeysValue, SessionVar.Expand(
           "%AddinFileName%"), 1, false) > 0 then 
        iIndex = -1 
        -- leave loop 
        break; 
       else 
        if (sValue == "OPEN") then 
         iIndex = 0 
        else 
         iIndex = String.ToNumber(String.Mid(
           sValue, 5, String.Length(sValue)-4)) 
        end; 
       end; 
      end; 
     end; 

     -- -1 means: This add-in is already installed; we're done 
     if iIndex ~= -1 then   
      --Determine path based on variable "%AddinFileName% 
      sAppPath = String.Char(34).. 
         SessionVar.Expand("%AppFolder%").. 
         "\\".. 
         SessionVar.Expand("%AddinFileName%").. 
         String.Char(34) 

      -- -2 is the initialized value of the index counter 
      if (iIndex == -2) then 
       -- OPEN-key does not exist 
       Registry.SetValue(2, sSubKey, "OPEN", 
            sAppPath, REG_SZ) 
      else 
       Registry.SetValue(2, sSubKey, "OPEN"..(iIndex + 1), 
            sAppPath, REG_SZ) 
      end; 
     end; 
    end; 
end; 

답변

0

이 문제가 해결되었습니다. 설치를 할 때 레지스트리 레코드를 사용해야합니다.

result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" , "LoadBehavior" , "3" , REG_DWORD); 
result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" ,"FriendlyName", "program name", REG_SZ); 
result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" , "Description" , "program name" , REG_SZ); 
result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" ,"Manifest", SessionVar.Expand("%AppFolder%\\myvtofile.vsto|vstolocal"), REG_SZ); 

엑셀 시작시 추가 기능 시작에 사용됩니다.

LoadBehavior 키의 값은 "3"이어야합니다.

0

보인다 "2010.dll를 들어 포스타 Guvercini 엑셀 추가 기능"입니다.
그렇다면 추가 기능 이름 앞에/A를 붙이면 Excel에 자동화 추가 기능이 있음을 알릴 수 있습니다. 그렇지 않으면 XLL 또는 XLA 또는 XLAM을 기대합니다.