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

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

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

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

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
4
0
4 175
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я не уверен на 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 - в коде есть функция, которая сравнивается с версией всплывающей подсказки с кодом. Оттуда вы можете удалить панель команд и перестроить ее. Надеюсь, это поможет.

ozmike 25.11.2013 10:38

Другие вопросы по теме