Изменить .xla файл с MSBuild - PullRequest
       74

Изменить .xla файл с MSBuild

4 голосов
/ 17 сентября 2008

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

  1. Открыть документ XLA в Excel.
  2. Переключение в режим VBEditor. (Alt + F11)
  3. Откройте VBProject, введите пароль.
  4. Открыть файл modGlobal.
  5. Изменить значение переменной по умолчанию на текущую дату.
  6. Закрыть и сохранить проект.

Я в растерянности из-за того, как автоматизировать процесс. Лучшее, что я могу придумать, - это макрос Excel или скрипт Auto-IT. Я мог бы также написать пользовательскую задачу MSBuild, но это может быть ... сложно. У кого-нибудь еще есть другие предложения?

Ответы [ 3 ]

3 голосов
/ 23 сентября 2008

Альтернативным способом обработки версий файла 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
1 голос
/ 18 сентября 2008

Я не уверен на 100%, как сделать именно то, что вы просили. Но угадать цель, которую вы имеете в виду, есть несколько возможностей.

1) Сделайте часть (или все) ваших глобальных файлов отдельным текстовым файлом, который распространяется вместе с .XLA. Я бы использовал это для внешних ссылок, таких как версия остальной части вашего приложения. Запишите это во время сборки и распространите, и прочитайте о загрузке XLA.

2) Я предполагаю, что вы пишете версию основного компонента (т. Е. Не части XLA) вашего приложения. Если это правда, зачем хранить это в своем XLA? Почему бы не сделать так, чтобы основная часть приложения позволяла работать определенной версии XLA. Версия 1.1 основного приложения может принимать вызовы из версий 7.1 - 8.9 XLA.

3) Если вы просто хотите обновить XLA, чтобы он был включен в вашу систему контроля версий или подобное (я думаю, здесь), возможно, просто коснитесь файла, чтобы он выглядел так, как будто он изменился.

Если вы контролируете версию остального приложения, я просто вставлю ее в текстовый файл и распространю вместе с XLA.

0 голосов
/ 18 сентября 2008

Вы можете изменить код в xla программно из Excel. Вам потребуется ссылка на компонент «Microsoft Visual Basic для расширяемости приложений».

Примеры на Отличный сайт Чипа Пирсона должны помочь вам начать.

...