Я пытаюсь создать сценарий сборки для своего текущего проекта, который включает надстройку Excel. Надстройка содержит VBProject с файлом modGlobal с переменной version_Number. Это число нужно менять для каждой сборки. Точные шаги:
Я не понимаю, как автоматизировать этот процесс. Лучшее, что я могу придумать, - это макрос Excel или сценарий Auto-IT. Я мог бы также написать специальную задачу MSBuild, но это может оказаться ... сложным. Есть ли у кого-нибудь еще какие-нибудь предложения?


Я не уверен на 100%, как сделать именно то, что вы просили. Но, угадав цель, которую вы имеете в виду, есть несколько возможностей.
1) Сделайте часть (или все) ваших глобалов отдельным текстовым файлом, который распространяется с .XLA. Я бы использовал его для внешних ссылок, таких как версия остальной части вашего приложения. Напишите это во время сборки и распространения, а также ознакомьтесь с загрузкой XLA.
2) Я предполагаю, что вы пишете версию основного компонента (т.е. не XLA-часть) вашего приложения. Если это правда, зачем хранить это в своем XLA? Почему бы не сделать так, чтобы основная часть приложения позволяла работать определенной версии XLA. Версия 1.1 основного приложения может принимать звонки из версий 7.1–8.9 XLA.
3) Если вы просто хотите обновить XLA, чтобы он был включен в вашу систему контроля версий или аналогичную (я предполагаю здесь), возможно, просто прикоснитесь к файлу, чтобы он выглядел так, как будто он изменился.
Если это версия остальной части приложения, которой вы управляете, я бы просто вставил ее в текстовый файл и распространял вместе с XLA.
Вы можете программно изменить код в xla из Excel. Вам понадобится ссылка на компонент «Microsoft Visual Basic для расширения приложений ..».
Примеры на Отличный сайт Чипа Пирсона должны помочь вам начать работу.
Альтернативный способ управления версиями файла XLA - использовать настраиваемое свойство в свойствах документа. Вы можете получить доступ и управлять с помощью COM, как описано здесь: http://support.microsoft.com/?kbid=224351.
Преимущества этого:
Вы можете проверить номер версии, не открывая файл XLA.
Вам не нужен Excel на вашем компьютере сборки - только компонент DsoFile.dll
Другой альтернативой было бы сохранить номер версии (возможно, и другие данные конфигурации) на листе в файле XLA. Рабочий лист не будет виден пользователям XLA. Один из методов, который я использовал в прошлом, - это сохранить надстройку в виде файла XLS в системе управления версиями, а затем в рамках процесса сборки (например, в событии Post-Build) запустить приведенный ниже сценарий, чтобы преобразовать его в 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
Другой способ версии XLA - сохранить номер версии в свойстве панели команд / панели инструментов, если она у вас есть (например, сохранить версию во всплывающей подсказке). Код VBA может рассинхронизироваться с панелью команд кода xla, если вы поменяете местами файлы xla. Сравните эту всплывающую подсказку с кодом VBA - в коде есть функция, которая сравнивается с версией всплывающей подсказки с кодом. Оттуда вы можете удалить панель команд и перестроить ее. Надеюсь, это поможет.