Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Добавить надстройку в Microsoft Excel (http://forum.oszone.net/showthread.php?t=334983)

c4uran 23-05-2018 11:46 2815053

Добавить надстройку в Microsoft Excel
 
Задача такая

Нужен bat который добавит в Excel 2016 из файла макрос и запустит его

Условия:

Действует политика на отключение макросов из excel после перезагрузки
Раз в неделю за короткий срок необходимо на 30+ компах добавить макрос в excel
Удаленного доступа и админки к компьютерам нет, можно только запустить bat like приложение

Iska 23-05-2018 12:09 2815060

c4uran, зачем добавлять макрос в Рабочую книгу? Каков код макроса?

c4uran 23-05-2018 12:17 2815063

Макрос сложный там целое приложение для экономистов, это нужно для некоторых занятий

Просто чтобы ускорить процесс и как дурак при студентах не бегать и добавлять макрос хотелось бы этот момент ускорить

Да и суть в том чтобы добавить макрос не только в определенную книгу а в целом в excel

Iska 23-05-2018 12:41 2815076

Тогда я вообще не понимаю, как именно связаны все перечисленные Вами понятия: политика, перезагрузка, добавление макроса, «в целом в Excel».

c4uran 23-05-2018 13:07 2815080

Возможно это избыточная информация

Необходимо добавить макрос в excel (что бы запуская excel в нем отображался этот макрос)

Iska 23-05-2018 14:09 2815089

c4uran, тогда я отвечу так: невозможно добавить макрос «в excel». Макрос можно добавить только в Рабочую книгу/Шаблон.

c4uran 23-05-2018 14:32 2815095

Хорошо в таком случае я не правильно выразился и имею ввиду надстройку в excel

megaloman 23-05-2018 14:39 2815096

c4uran, Я не знаю уровень ваших доступов к файлам. Поэтому на пальцах:
1. Делаю у себя новую чистую книгу с нужным макросом.
2. Последовательно:
- открываю новую чистую книгу;
- открываю на Ваших компьютерах книгу;
- импортирую, если нужно, имеющиеся там листы в Вашу чистую книгу;
- закрываю старый файл;
- сохраняю новый файл вместо старого; закрываю книгу.

Пункт 2 в цикле.
Наверное, реализуется на vbs.

А если это для студентов, то разве не надо просто скопировать одинаковые таблицы (или шаблоны) с правильным макросом на их машины, чтобы на занятии Вас понимали все одинаково? При этом никаких заморочек с обновлением макроса, импортом старых листов и т д
В любом случае права на запись у Вас должны быть.

c4uran 23-05-2018 15:11 2815099

megaloman, я неправильно выразился, имел ввиду надстройку excel а не макрос, она автоматически удаляется каждый день и нужна только раз или два в неделю но на всех компьютерах

Iska 23-05-2018 15:23 2815101

c4uran, Вы очень странно выражаетесь. Сделайте перечень скриншотов с описанием, либо запишите видео того, как Вы делаете это «ручками».

c4uran 24-05-2018 10:24 2815194

Прошу прощение, сейчас попробую описать подробнее процесс который приходится делать руками на 30 компьютерах:

1. Запускаю Excel
2. Щелкаю в левый верхний угол на выпадающее меню файл
3. Там выбираю Параметры
4. В открывшемся меню Параметры Excel в списке слева выбираю Надстройки
5. В открывшемся меню снизу где написано Управление выбираю в выпадающем меню Надстройки Excel и правее нажимаю кнопку Перейти
6. В открывшемся меню Надстройки справа выбираю кнопку Обзор...
7. В открывшемся меню выбора файла выбираю файл надстройки в формате XLAM
8. Снова открывается меню Надстройки и там уже в списке доступных надстроек я ставлю галочку у имени надстройки которую только что добавил
9. Нажимаю Ок и меню Надстройки закрывается я оказываюсь в начальном экране с таблицей где среди верхних выпадающих меню ( файл, главная, вставка, итд появляется раздел - Надстройки
10. выбираю этот раздел и теперь могу запустить надстройку которую я добавил

megaloman 24-05-2018 12:04 2815216

Цитата:

Цитата c4uran
Удаленного доступа и админки к компьютерам нет, можно только запустить bat like приложение »

То есть, на каждом компьютере ручками Вы хотите запустить что-то типа командного файла? Для такого случая вот .vbs -скрипт на примере надстройки "Поиск решения".
Код:

With CreateObject("Excel.Application")
    .Visible = True
'    .Visible = False
    .Workbooks.Add

    .AddIns("Поиск решения").Installed = False
    .AddIns.Add ("C:\Program Files\Microsoft Office\Office14\Library\SOLVER\SOLVER.XLAM")
    .AddIns("Поиск решения").Installed = True
   
    .ActiveWorkbook.Close
    .Quit
End With

Его можно, наверное, разместить на общем ресурсе и запускать на каждой машине. Или поместить на каждой машине в автозагрузку.

Пропишите свои имена надстройки и xlam-файла.
Конечно, это сработает, если Office на всех машинах установлен одинаково и путь к надстройке одинаков.

Iska 24-05-2018 12:16 2815223

c4uran, у Вас есть административные привилегии на машине? Где будет размещаться файл надстройки?

c4uran 24-05-2018 12:43 2815231

Вложений: 2
Не подключает вываливает такую ошибку, прикладываю ошибку и саму надстройку

c4uran 24-05-2018 12:44 2815232

Iska, надстройка лежит на диске С или в Документах

Iska 24-05-2018 12:44 2815233

c4uran, ответьте на мои вопросы.

c4uran 24-05-2018 12:46 2815234

Iska, простите пока долго отвечал вопросы еще не появились, прав админа на компьютерах нет

Iska 24-05-2018 13:14 2815239

c4uran, тогда установка надстройки возможна только в режиме «на пользователя».

Попробуйте так:
Скрытый текст
Код:

Option Explicit

Dim strSourceFile
Dim strDestPath

Dim objFSO
Dim objFolder


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strSourceFile = objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "mc.xlam")

If objFSO.FileExists(strSourceFile) Then
        Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:AppData")
       
        If Not objFolder Is Nothing Then
                strDestPath = objFolder.self.Path & "\Microsoft\AddIns"
               
                If objFSO.FolderExists(strDestPath) Then
                        objFSO.CopyFile strSourceFile, strDestPath & "\", True
                       
                        With WScript.CreateObject("Excel.Application")
                                .Workbooks.Add
                                .AddIns.Add(objFSO.BuildPath(strDestPath, objFSO.GetFileName(strSourceFile))).Installed = True
                                .Quit
                        End With
                Else
                        WScript.Echo "Can't find destination folder [" & strDestPath & "]."
                        WScript.Quit 3
                End If
               
                Set objFolder = Nothing
        Else
                WScript.Echo "Can't parse [shell:AppData] special folder."
                WScript.Quit 2
        End If
Else
        WScript.Echo "Can't find source file [" & strSourceFile & "]."
        WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0


Надстройка mc.xlam должна находиться рядом со скриптом. Она будет скопирована в профиль пользователя, а затем зарегистрирована.

c4uran 24-05-2018 13:30 2815248

Iska, Работает спасибо, а такой вопрос почему реализация на vbs, cmd нельзя сделать подобный вызов?

Iska 24-05-2018 13:40 2815250

c4uran, такую реализацию никак нельзя сделать на пакетных файлах — там нет поддержки Automation. Кроме WSH, аналогичное также можно проделать посредством PowerShell.

P.S. Исправьте заголовок темы на более соответствующее содержанию, наподобие «Добавить надстройку в Microsoft Excel», путём редактирования первого сообщения темы.

c4uran 24-05-2018 13:43 2815252

Iska, поправил, а если не сложно можете показать реализацию на powershell?

Iska 24-05-2018 14:15 2815255

c4uran, примерно так:
Скрытый текст
Код:

$sSourceFile = Join-Path -Path $PSScriptRoot -ChildPath "mc.xlam"

if(Test-Path -Path $sSourceFile -PathType Leaf) {
    $sDestPath = "$([Environment]::GetFolderPath("ApplicationData"))\Microsoft\AddIns"
    $sDestFile = Join-Path -Path $sDestPath -ChildPath "mc.xlam"
   
    if(Test-Path -Path $sDestPath -PathType Container) {
        [System.IO.File]::Copy($sSourceFile, $sDestFile, $true)
       
        $oExcel = New-Object -ComObject 'Excel.Application'
        $oExcel.Workbooks.Add() | Out-Null
        $oExcel.AddIns.Add($sDestFile).Installed = $true
        $oExcel.Quit()
    } else {
        Write-Host "Can't find destination folder [$sDestPath]." -ForegroundColor Red
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}


c4uran 25-05-2018 13:10 2815449

Iska, Вы волшебник! спасибо большое! Хоть я и вроде понимаю что написано в пс скрипте но могли бы уточнить почему используете запрос [System.IO.File]::Copy это вроде вызов из .net

и если не сложно можете подсказать где можно изучить запросы приложений например офиса т.к этот абзац для меня загадка:

Код:

$oExcel = New-Object -ComObject 'Excel.Application'
        $oExcel.Workbooks.Add() | Out-Null
        $oExcel.AddIns.Add($sDestFile).Installed = $true
        $oExcel.Quit()

где взять хелп по этим вызовам?

Iska 25-05-2018 13:31 2815455

Цитата:

Цитата c4uran
но могли бы уточнить почему используете запрос [System.IO.File]::Copy это вроде вызов из .net »

Используется статический метод Copy класса System.IO.File. Почему так, а не командлет PowerShell Copy-Item? Мне так проще.

Цитата:

Цитата c4uran
где можно изучить запросы приложений например офиса »

Win-R, excel.exe, Enter, Alt-F11, F1:
Скрытый текст

Надеюсь, что в Вашей версии Microsoft Office осталось так же. Ну, или в MSDN.


Время: 01:40.

Время: 01:40.
© OSzone.net 2001-