2012-05-22 3 views
1

참조 : vbScript opens up excel but doesn't load macro/modules?SQL Server - VBScript : SQL 작업에서 Excel 파일을 여는 VBScript가 실패 했습니까?

이제 SQL Job에서 내 vbscript를 실행하려고했습니다. Job이 성공적으로 실행되었지만 엑셀 파일을 열지 못했습니다 (Checked Task Scheduler). 나는이 직업에 대한 역사를 보러 갔다.

메시지 사용자 : GSOPS4 \ SYSTEM으로 실행되었다. Microsoft (R) Windows 스크립트 호스트 버전 5.7 Copyright (C) Microsoft Corporation. All rights reserved.C : \ WINDOWS \ system32 \ TestTOPTMay307.vbs (5, 1) Microsoft Excel : Microsoft Excel에서 '\ gsops4 \ data_extracts \ TestTOPTMay307.xlsm'파일에 액세스 할 수 없습니다. 가능한 원인은 여러 가지가 있습니다. 파일 이름 또는 경로가 존재하지 않습니다. 파일이 다른 프로그램에서 사용 중입니다. 저장하려는 통합 문서의 이름이 현재 열려있는 통합 문서와 동일합니다. 프로세스 종료 코드 0. 단계가 성공했습니다.

나는 또한 내가이 일을 얻을 수 없었다 그러나이 스레드 Run a C# Console Application from SQL Server Agent (Job)?

의 제안을 따랐다. 이 일은 지난 48 시간 동안 저를 짜증나게했습니다. 무엇이 그것을 일으키는 지에 대한 단서와 어떻게하면 성공적으로 내 작업을 실행할 수 있습니까 (SQL에서 내 vbscript 파일을 실행하십시오) 매우 높이 평가 될 것입니다. 모두에게 고마워요!

의견이 있으십니까?

+3

VBS를 사용하여 SQL Server 작업에서 Excel을 열어 보시겠습니까? 왜? 어떤 종류의 대화 나 UI가 필요한 것은 SQL Server에서 제대로 작동하지 않습니다. 경로도 확인해야합니다.'\ gsops4 \ ... \ '가 올바르지 않습니다. –

+1

나는 권한 오류라고 생각합니다. 그러나 @AaronBertrand는 첫 번째 문제가 있으며 유효한 경로가 없습니다. 해당 파일이 C : \ gsops4 \ data_extracts에 있고 그 다음에도 항상 전체 경로를 지정하는 것이 일반적입니다. – jcolebrand

+0

일반적으로 가능한 모든 머리가없는 프로세스에서 EXCEL.EXE를 사용하지 마십시오. 스프레드 시트에서 데이터를 추출하는 대안에 대한 제안은 아래 답변을 참조하십시오. – ConcernedOfTunbridgeWells

답변

3

대안보기

Excel이 콘솔에 대화 상자를 팝업 그리고 그들은 사용자에 의해 조치가 취해 때까지 매달려 매우 좋다. 이것은 매우 서버에 나쁜 일입니다, 그것은 프로세스를 동결하고 실행 Excel 인스턴스를 유출 것입니다. 또한 서버 자체에 Excel을 설치해야합니다.

일반적으로 OLEDB 드라이버를 통해 스프레드 시트를 읽고 서버 측 작업에서 계산을 복제하는 에이전트를 통해 SSIS 작업을 예약하는 것이 훨씬 좋습니다. 매크로는 정확히 무엇을합니까?

내 하루 Excel 데이터 소스에서 몇 가지 ETL 작업을 수행했으며 (IMO) 데이터를 처리하는 가장 좋은 방법은 EXCEL.EXE을 호출해야하는 번거 로움을 피하는 것입니다. COM 참조가 매달려 있으면 매우 까다롭기 때문에 작성된 모든 COM 객체를 폐기하는 데 매우 신중해야합니다. 경우에 따라 기본 참조 (워크 시트, 워크 북, 범위 등)는 형식 라이브러리가 어떤 기능을 노출시키지 않으므로 프로그래밍 방식으로 정리할 수없는 불투명 한 참조를 장면 뒤에 만듭니다.

.NET 기본 interop 어셈블리는 명시 적으로 정리해야하는 자신의 참조를 생성하기 때문에 추가 복잡성을 추가합니다. COM과 .Net 구성 요소가 잘 어울리는 데 여러 권의 책이 쓰여있는 정도까지 COM과 .Net 간에는 상당한 임피던스 불일치가 있습니다.

다행히도 WSH는 .NET과 관련이 없지만 Excel COM 서버에서 COM Remoting은 DBMS 내에서 수행하는 것이 좋습니다. 스테이징 테이블에 시트를 읽은 다음이 데이터의 형태를 추출 -

두 훨씬 더 안전은

  1. 열고 OLEDB 드라이버에서 통합 문서에 접근한다. 이것은 Excel이 서버에 설치 될 필요조차없고, 매우 견고합니다.

  2. .xlsx zip 파일을 다운로드하고 워크 시트를 꺼내보십시오. 실제로 생각한 것보다 효과적입니다. sheetxx.xml 파일은 매우 간단한 형식으로되어 있으며 사용자가 필요로하는 유일한 다른 파일은 sharedStrings.xml입니다. 일반적으로 SSIS를 사용할 수있는 경우 SQL Server에서이 작업을 수행 할 필요는 없지만 비 Windows 호스트에서 Oracle을 사용하는 경우에는 매우 유용한 트릭입니다.

편집 : 당신은 Excel에서 당신이 그것을 실행중인 컴퓨터에 설치되어 있어야합니다 OLE 자동화를 통해 Excel을 사용하려면 . 일반적으로 Excel을 서버에 설치하는 것은 큰 계획이 아닙니다. 특별히 안전하지 않기 때문입니다. 또한 데스크톱 도구이기도하고 COM 참조를 생성하고 Excel 인스턴스를 실행하는 경향이 있습니다. COM 참조 작성 및 처리와 함께 T를 교차하지 않으면 Excel 인스턴스가 실행됩니다.

SSIS에는 Excel 데이터 원본이 있습니다. BIDS에서 SSIS 프로젝트를 만들고 새 연결 관리자를 만드는 방법으로 확인할 수 있습니다. 옵션 중 하나가 Excel입니다.

그러나 공유 목록을 쿼리해야하는 경우 Excel을 사용하지 않고 프로그래밍 방식으로 쿼리하는 것이 좋습니다. 작은 google-fu는이를 수행하는 방법에 대한 몇 가지 예를 제시해야합니다. here.. 독립 실행 형 .Net 응용 프로그램 또는 SSIS 패키지의 스크립트 작업을 통해이 작업을 수행 할 수 있습니다 (스크립트 작업은 SSIS 패키지 내에서 빌드 할 수있는 .Net 사용자 지정 작업입니다).

이 작업을 수행하는 경우 SSIS (다른 옵션이없는 경우 Visual C# Express를 사용하여)를 개발 한 다음 스크립트 작업으로 이식하는 것이 좋습니다. Python에 익숙하다면 IronPython 또는 Boo는 .Net API를 대화 형으로 실행하여 멋진 결과물을 얻을 수있는 훌륭한 도구입니다.

+0

매크로는 정확히 무엇을합니까? iqy 데이터를 새로 고치고 Activesheet로 펌핑합니다. iqy가 생성되어 SharePoint 목록 데이터를 가져옵니다. iqy 파일에서 새로 고친 데이터를 Excel로 가져 오는 프로세스는 자동화되어야합니다.자동화가 완료되었지만 SQL 작업에서이 vbs 스크립트 파일을 실행할 필요가 있습니다. 자동화의 나머지 절반 (보고서 작성기로 작업하는 것이 좋음)이 SQL 작업에 있기 때문입니다. 나는 서버 자체에 Excel을 설치하는 것이 무엇을 의미하는지 궁금합니다. 내 문제를 해결할 수 있을까요? – Nemo

+0

# 1 안전한 접근에 관심이 많습니다. 나는 SSIS에 상당히 새로운 편이다. 날 올바른 방향으로 가르쳐 주시겠습니까? 감사. – Nemo

+0

@Nemo - Excel에서 정교화를 위해 위를 참조하십시오. – ConcernedOfTunbridgeWells