programing

Excel이 프로그래밍 방식으로 인스턴스화될 때 추가 기능 로드

abcjava 2023. 7. 20. 21:39
반응형

Excel이 프로그래밍 방식으로 인스턴스화될 때 추가 기능 로드

다음을 사용하여 VBA를 사용하여 Excel의 새 인스턴스를 만들려고 합니다.

Set XlApp = New Excel.Application

문제는 이 새로운 Excel 인스턴스가 정상적으로 Excel을 열 때 로드되는 모든 addin을 로드하지 않는다는 것입니다.Excel Application 개체에 사용자가 지정한 모든 addin에 로드할 수 있는 항목이 있습니까?

특정 애드인을 로드하려는 것이 아니라 새로운 엑셀 애플리케이션을 사용자가 직접 연 것처럼 동작하게 만들기 때문에 엑셀을 열 때 주로 로드되는 모든 사용자가 선택한 애드인의 목록을 정말 찾고 있습니다.

저는 이 문제와 애플리케이션을 다시 조사했습니다.addins 컬렉션은 도구->Addins 메뉴에 나열된 모든 addin을 가지고 있으며, addin 설치 여부를 나타내는 부울 값을 가지고 있습니다.그래서 지금 저에게 효과가 있는 것처럼 보이는 것은 모든 addin과 if를 반복하는 것입니다.= true를 설치한 후 설정합니다.False로 설치되고 True로 다시 설치되면 내 애드인이 제대로 로드되는 것 같습니다.

Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean

    Dim CurrAddin As Excel.AddIn

    For Each CurrAddin In TheXLApp.AddIns
        If CurrAddin.Installed Then
            CurrAddin.Installed = False
            CurrAddin.Installed = True
        End If
    Next CurrAddin

End Function

사용.CreateObject("Excel.Application")를 사용하는 것과 동일한 결과를 얻을 수 있습니다.New Excel.Application,불행하게도.

파일 경로 및 이름을 사용하여 개별적으로 필요한 추가 기능을 로드해야 합니다.Application.Addins.Add(string fileName)방법.

자바스크립트를 사용하는 다른 사람들을 위해 이 답변을 남깁니다.

약간의 배경...우리 회사에는 JavaScript를 사용하여 Excel을 실행하고 즉시 스프레드시트를 생성하는 타사 웹 앱이 있습니다.또한 저장 버튼의 동작을 재정의하는 Excel 추가 기능이 있습니다.추가 기능을 사용하면 파일을 로컬로 저장하거나 온라인 문서 관리 시스템에 저장할 수 있습니다.

Windows 7 및 Office 2010으로 업그레이드한 후 스프레드시트를 생성하는 웹 앱에 문제가 있음을 알게 되었습니다.JavaScript가 Excel에서 스프레드시트를 생성할 때 갑자기 저장 버튼이 작동하지 않습니다.저장을 클릭하면 아무 일도 일어나지 않습니다.

여기 있는 다른 답변을 사용하여 자바스크립트로 솔루션을 구성할 수 있었습니다.기본적으로 메모리에 Excel 응용 프로그램 개체를 만든 다음 특정 추가 기능을 다시 로드하여 저장 단추 동작을 다시 가져옵니다.다음은 당사 수정사항의 단순화된 버전입니다.

function GenerateSpreadsheet()
{
    var ExcelApp = getExcel();
    if (ExcelApp == null){ return; }

    reloadAddIn(ExcelApp);

    ExcelApp.WorkBooks.Add;
    ExcelApp.Visible = true;
    sheet = ExcelApp.ActiveSheet;

    var now = new Date();
    ExcelApp.Cells(1,1).value = 'This is an auto-generated spreadsheet, created using Javascript and ActiveX in Internet Explorer';

    ExcelApp.ActiveSheet.Columns("A:IV").EntireColumn.AutoFit; 
    ExcelApp.ActiveSheet.Rows("1:65536").EntireRow.AutoFit;
    ExcelApp.ActiveSheet.Range("A1").Select;

    ExcelApp = null;
}

function getExcel() {
   try {
       return new ActiveXObject("Excel.Application");
   } catch(e) {
       alert("Unable to open Excel. Please check your security settings.");
       return null;
   }
}

function reloadAddIn(ExcelApp) {
    // Fixes problem with save button not working in Excel,
    // by reloading the add-in responsible for the custom save button behavior
    try {
        ExcelApp.AddIns2.Item("AddInName").Installed = false;
        ExcelApp.AddIns2.Item("AddInName").Installed = true;
    } catch (e) { }
}

언급URL : https://stackoverflow.com/questions/213375/loading-addins-when-excel-is-instantiated-programmatically

반응형