문제

Excel 추가 기능이 포함된 현재 프로젝트에 대한 빌드 스크립트를 만들려고 합니다.추가 기능에는 변수 version_Number가 있는 modGlobal 파일이 있는 VBProject가 포함되어 있습니다.이 숫자는 빌드마다 변경되어야 합니다.정확한 단계:

  1. Excel로 XLA 문서를 엽니다.
  2. VBEditor 모드로 전환합니다.(Alt+F11)
  3. VBProject를 열고 비밀번호를 입력하세요.
  4. ModGlobal 파일을 엽니다.
  5. 변수의 기본값을 현재 날짜로 변경합니다.
  6. 프로젝트를 닫고 저장하세요.

프로세스를 자동화하는 방법을 잃어버렸습니다.내가 생각해 낼 수 있는 최선의 방법은 Excel 매크로나 Auto-IT 스크립트입니다.사용자 지정 MSBuild 작업을 작성할 수도 있지만 그렇게 하면...교활한.다른 제안이 있는 사람이 있나요?

도움이 되었습니까?

해결책

XLA 파일 버전 관리를 처리하는 또 다른 방법은 문서 속성에서 사용자 정의 속성을 사용하는 것입니다.여기에 설명된 대로 COM을 사용하여 액세스하고 조작할 수 있습니다. http://support.microsoft.com/?kbid=224351.

이것의 장점은 다음과 같습니다:

  • XLA 파일을 열지 않고도 버전 번호를 확인할 수 있습니다.

  • 빌드 머신에는 Excel이 필요하지 않습니다. DsoFile.dll 구성 요소만 있으면 됩니다.

또 다른 대안은 XLA 파일의 워크시트에 버전 번호(다른 구성 데이터도 가능)를 저장하는 것입니다.워크시트는 XLA 사용자에게 표시되지 않습니다.과거에 제가 사용한 한 가지 기술은 추가 기능을 소스 제어에 XLS 파일로 저장한 다음 빌드 프로세스의 일부로 저장하는 것입니다(예:빌드 후 이벤트에서) 아래 스크립트를 실행하여 출력 디렉터리에서 XLA로 변환합니다.이 스크립트는 저장하기 전에 워크시트의 버전 번호를 업데이트하도록 쉽게 확장할 수 있습니다.제 경우에는 Excel 추가 기능이 VSTO를 사용하고 Visual Studio가 XLA 파일을 직접 지원하지 않기 때문에 이 작업을 수행했습니다.

'
'   ConvertToXla.vbs
'
'   VBScript to convert an Excel spreadsheet (.xls) into an Excel Add-In (.xla)
'
'   The script takes two arguments:
'
'   - the name of the input XLS file.
'
'   - the name of the output XLA file.
'
Option Explicit
Dim nResult
On Error Resume Next
nResult = DoAction
If Err.Number <> 0 Then 
    Wscript.Echo Err.Description
    Wscript.Quit 1
End If
Wscript.Quit nResult

Private Function DoAction()

    Dim sInputFile, sOutputFile

    Dim argNum, argCount: argCount = Wscript.Arguments.Count

    If argCount < 2 Then
        Err.Raise 1, "ConvertToXla.vbs", "Missing argument"
    End If

    sInputFile = WScript.Arguments(0)
    sOutputFile = WScript.Arguments(1)

    Dim xlApplication

    Set xlApplication = WScript.CreateObject("Excel.Application")
    On Error Resume Next 
    ConvertFileToXla xlApplication, sInputFile, sOutputFile
    If Err.Number <> 0 Then 
        Dim nErrNumber
        Dim sErrSource
        Dim sErrDescription
        nErrNumber = Err.Number
        sErrSource = Err.Source
        sErrDescription = Err.Description
        xlApplication.Quit
        Err.Raise nErrNumber, sErrSource, sErrDescription
    Else
        xlApplication.Quit
    End If

End Function

Public Sub ConvertFileToXla(xlApplication, sInputFile, sOutputFile)

    Dim xlAddIn
    xlAddIn = 18 ' XlFileFormat.xlAddIn

    Dim w
    Set w = xlApplication.Workbooks.Open(sInputFile,,,,,,,,,True)
    w.IsAddIn = True
    w.SaveAs sOutputFile, xlAddIn
    w.Close False
End Sub

다른 팁

귀하가 요청한 것을 정확히 어떻게 수행하는지 100% 확신할 수 없습니다.그러나 당신이 염두에 두고 있는 목표를 추측해 보면 몇 가지 가능성이 있습니다.

1) 전역 항목의 일부(또는 전체)를 .XLA와 함께 배포되는 별도의 텍스트 파일로 만드세요. 나머지 앱 버전과 같은 외부 참조용으로 이 파일을 사용하겠습니다.빌드 시 이를 작성하고 XLA 로드 시 배포하고 읽습니다.

2) 나는 당신이 주요 구성 요소의 버전을 작성하고 있다고 생각합니다 (예 :XLA가 아닌 부분).이것이 사실이라면 왜 이것을 XLA에 저장합니까?앱의 주요 부분에서 특정 버전의 XLA가 작동하도록 허용하면 어떨까요?기본 앱 버전 1.1은 XLA 버전 7.1 - 8.9의 호출을 수락할 수 있습니다.

3) XLA를 업데이트하여 버전 제어 시스템이나 유사한 시스템에 포함시키려는 경우(여기서는 추측) 파일을 터치하면 변경된 것처럼 보일 수 있습니다.

당신이 제어하고 있는 앱의 나머지 버전이라면 텍스트 파일에 넣어서 XLA와 함께 배포하면 됩니다.

Excel 내에서 프로그래밍 방식으로 xla의 코드를 수정할 수 있습니다.'Microsoft Visual Basic for Application Extensibility..' 구성 요소에 대한 참조가 필요합니다.

에 대한 예 Chip Pearson의 훌륭한 사이트 시작해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top