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
'programing' 카테고리의 다른 글
오류: 함수 detect MultiScale의 (-215) !empty() (0) | 2023.07.20 |
---|---|
하위 클래스에서 기본 클래스의 __init_ 메서드를 호출하는 방법은 무엇입니까? (0) | 2023.07.20 |
플라스크-SQLAChemy 가져오기/컨텍스트 문제 (0) | 2023.07.20 |
연결의 유효성을 검사하지 못했습니다(이 연결이 닫혔습니다.).더 짧은 maxLifetime 값을 사용하는 것을 고려할 수 있습니다. (0) | 2023.07.20 |
UUID 기본 키가 BINARY(16)인 MariaDB 테이블이 NULL이 아님 (0) | 2023.07.20 |