progs:msoffice
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
progs:msoffice [24.10.2023 07:20] – [Outlook не открывает ссылки DFS] viacheslav | progs:msoffice [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Microsoft Office 2016 ===== | ||
+ | '' | ||
+ | * Расположение установки и название - прописать название организации | ||
+ | * Лицензирование и пользовательский интерфейс - "Я принимаю условия соглашения", | ||
+ | * Изменение свойств установки - " | ||
+ | * Изменение параметров пользователя - отключить все пункты в " | ||
+ | * Задание режимов установки компонентов - Отключить " | ||
+ | |||
+ | GPO - [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | $prop = @{ | ||
+ | Path = ' | ||
+ | Value = 1 | ||
+ | PropertyType = ' | ||
+ | Force = $true | ||
+ | Confirm = $false | ||
+ | } | ||
+ | New-Item $prop.path -Force | ||
+ | New-ItemProperty -Name EnableAutomaticUpdates @prop | ||
+ | New-ItemProperty -Name HideEnableDisableUpdates @prop | ||
+ | </ | ||
+ | |||
+ | ===== Обновления ===== | ||
+ | Установка обновлений при установке Офиса. | ||
+ | |||
+ | Here is an article which lists the latest updates for MSI versions of Office: [[https:// | ||
+ | Then you need to extract the MSP files from these updates, and put them into the Updates folder within your Office installation files.\\ | ||
+ | If needed, you may refer to the references below for more detailed information about this process.\\ | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ==== Вывести список обновлений ==== | ||
+ | Если ставить Офис сразу с обновлениями (из папке Updates), то они не покажутся в списке через GUI, но их можно вывести через Powershell. | ||
+ | <code powershell> | ||
+ | $PatchRegPath = ' | ||
+ | (Get-ItemProperty -Path $PatchRegPath).DisplayName | ||
+ | </ | ||
+ | |||
+ | ==== Скрипт извлечения обновлений из установленного Офиса ==== | ||
+ | Подходит для 2010/ | ||
+ | |||
+ | ++++ CollectOfficeUpdates.vbs | | ||
+ | |||
+ | <file vbscript CollectOfficeUpdates.vbs> | ||
+ | Dim oMsi, | ||
+ | Dim Patches, | ||
+ | Dim patch, | ||
+ | Dim qView | ||
+ | Dim sTargetFolder, | ||
+ | Const OFFICEID = " | ||
+ | Const PRODUCTCODE_EMPTY = "" | ||
+ | Const MACHINESID = "" | ||
+ | Const MSIINSTALLCONTEXT_MACHINE = 4 | ||
+ | Const MSIPATCHSTATE_APPLIED = 1 | ||
+ | Const MSIOPENDATABASEMODE_PATCHFILE = 32 | ||
+ | Const PID_SUBJECT = 3 ' | ||
+ | Const PID_TEMPLATES = 7 ' | ||
+ | Set oMsi = CreateObject(" | ||
+ | Set oFso = CreateObject(" | ||
+ | Set oWShell = CreateObject(" | ||
+ | |||
+ | ' | ||
+ | sTargetFolder = oWShell.ExpandEnvironmentStrings(" | ||
+ | If Not oFso.FolderExists(sTargetFolder) Then oFso.CreateFolder sTargetFolder | ||
+ | sMessage = " | ||
+ | oWShell.Popup sMessage, | ||
+ | |||
+ | 'Get all applied patches | ||
+ | Set Patches = oMsi.PatchesEx(PRODUCTCODE_EMPTY, | ||
+ | On Error Resume Next | ||
+ | |||
+ | 'Enum the patches | ||
+ | For Each patch in Patches | ||
+ | If Not Err = 0 Then Err.Clear | ||
+ | ' | ||
+ | Set msp = oMsi.OpenDatabase(patch.PatchProperty(" | ||
+ | Set SumInfo = msp.SummaryInformation | ||
+ | If Err = 0 Then | ||
+ | If InStr(SumInfo.Property(PID_TEMPLATES), | ||
+ | ' | ||
+ | Set qView = msp.OpenView(" | ||
+ | qView.Execute : Set record = qView.Fetch() | ||
+ | ' | ||
+ | oFso.CopyFile patch.PatchProperty(" | ||
+ | End If | ||
+ | End If 'Err = 0 | ||
+ | Next | ||
+ | |||
+ | 'patch | ||
+ | oWShell.Run " | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ==== Microsoft Office 2016 Click to Run ==== | ||
+ | |||
+ | Штатными средствами WSUS не обновляется, | ||
+ | <code dos> | ||
+ | C: | ||
+ | C: | ||
+ | </ | ||
+ | |||
+ | <file xml Download-64-bit-Office-2016.xml> | ||
+ | < | ||
+ | <Add SourcePath=" | ||
+ | <Product ID=" | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | <Updates Enabled=" | ||
+ | <Display Level=" | ||
+ | <Logging Level=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Excel ===== | ||
+ | Модули для Powershell для работы с .xls(x): [[https:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | <code powershell> | ||
+ | # Установить для пользователя (путь $env: | ||
+ | Install-Module -Name ImportExcel -Scope CurrentUser -SkipPublisherCheck | ||
+ | # Примеры работы | ||
+ | Import-Excel c: | ||
+ | Get-Service |Export-Excel -Show | ||
+ | </ | ||
+ | |||
+ | .xls -> .xlsx: | ||
+ | <code powershell> | ||
+ | & "(gci " | ||
+ | </ | ||
+ | |||
+ | ==== ImportExcel ==== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | # Раньше Эксель надо было использовать через ком-объект, | ||
+ | $xl = New-Object -ComObjext excel.application | ||
+ | $xl.Visible = $true # чтобы запустить эксель и видеть изменения | ||
+ | $wb = $xl.workbooks.add() # добавить пустую книгу | ||
+ | $ws = $wb.worksheets[" | ||
+ | $ws.cells[1, | ||
+ | $ws.cells[2, | ||
+ | # Заполнение таблиц таким образом трудоёмкое | ||
+ | |||
+ | # ImportExcel не требует установленного Экселя на компьютере и автоматизирует работу | ||
+ | # Список команд модуля | ||
+ | (Get-Module importexcel).ExportedCommands.Keys |sort | ||
+ | |||
+ | # Запустит Эксель с заполненной данными ячейкой | ||
+ | "Hello world" |Export-Excel | ||
+ | # Data будет заголовком уже с фильтром, | ||
+ | [pscustomobject]@{Data=" | ||
+ | # Выгрузятся ВСЕ свойства процессов | ||
+ | Get-Process |Export-Excel .\demo.xlsx | ||
+ | # Export-Excel всегда выгружает все доступные свойства, | ||
+ | # -show - сразу открыть созданный файл, -ClearSheet - очистить лист (по умолчанию данные добавляются) | ||
+ | Get-Process |select company, | ||
+ | # Помимо таблички, | ||
+ | $ps = Get-Process |select company, | ||
+ | $ps |Export-Excel .\demo.xlsx -show -IncludePivotTable -IncludePivotChart -PivotRows company -PivotData @{handles=' | ||
+ | # Выбор вида диаграммы (-ChartType) | ||
+ | $ps |Export-Excel .\demo.xlsx -show -IncludePivotTable -IncludePivotChart -PivotRows company -PivotData @{handles=' | ||
+ | # Убрать расшифровку (легенду), | ||
+ | $ps |Export-Excel .\demo.xlsx -show -IncludePivotTable -IncludePivotChart -PivotRows company -PivotData @{handles=' | ||
+ | # Задать имя таблице, | ||
+ | $ps |Export-Excel .\demo.xlsx -show -TableName Processes -AutoSize | ||
+ | # Автоприсвоение имён диапазону значений столбцов | ||
+ | $ps |Export-Excel .\demo.xlsx -show -AutoSize -AutoNameRange | ||
+ | # Построение диаграммы на основании автодиапазонов | ||
+ | $ChartDefinition = New-ExcelChart -XRange company -YRange handles | ||
+ | $ps |Export-Excel .\demo.xlsx -show -AutoNameRange -ExcelChartDefinition $ChartDefinition | ||
+ | # Задать больше параметров для диаграмм, | ||
+ | $barChart = New-ExcelChart -XRange company -YRange handles -Height 250 | ||
+ | $pieChart = New-ExcelChart -ChartType PieExploded3D -Row 15 -Height 250 -XRange company -YRange pm -NoLegend -ShowCategory -ShowPercent | ||
+ | $ps |Export-Excel .\demo.xlsx -show -AutoNameRange -ExcelChartDefinition $barChart, $pieChart | ||
+ | # Задать параметры Export-Excel предварительно, | ||
+ | $chart = New-ExcelChart -XRange company -YRange handles -Height 600 -Width 500 -Column 9 | ||
+ | $excelparams = @{show=$true; | ||
+ | $ps |Export-Excel @excelparams .\demo.xlsx -ExcelChartDefinition $chart | ||
+ | # Подсветка ячеек по условию (New-ConditionalText условие, | ||
+ | $data = Get-Service |select Status, | ||
+ | $text1 = New-ConditionalText stop | ||
+ | $text2 = New-ConditionalText runn Blue Cyan | ||
+ | $data |Export-Excel .\demo.xlsx -Show -AutoSize -ConditionalText $text1, $text2 | ||
+ | # Значки в ячейках столбца С | ||
+ | $data = (Get-Process).where{$_.company} |select Company, | ||
+ | $cfmt = New-ConditionalFormattingIconSet -Range " | ||
+ | $data |Export-Excel .\demo.xlsx -Show -AutoSize -ConditionalFormat $cfmt | ||
+ | # Импорт таблицы из HTML (в данном случае - Профессорско-преподавательский состав академии Гнесиных) | ||
+ | $url = ' | ||
+ | Import-Html $url -FirstDataRow 3 -Header '№ п/ | ||
+ | # Если входящие данные несложные, | ||
+ | # Модуль анализирует тип данных и предполагает, | ||
+ | $data |BarChart -Title 'A bar chart' | ||
+ | $data |PieChart -Title 'A pie chart' | ||
+ | $data |LineChart -Title 'A line chart' | ||
+ | $data |ColumnChart -Title 'A column chart' | ||
+ | # Диаграмма-график, | ||
+ | $plt = New-Plot | ||
+ | $null = $plt.plot((1, | ||
+ | $plt.show() | ||
+ | # Теперь нумеруются и X, и Y | ||
+ | $plt = New-Plot | ||
+ | $null = $plt.plot((1, | ||
+ | $plt.show() | ||
+ | # Мат. фильтр, | ||
+ | filter pow ($n){[math]:: | ||
+ | $t = Get-Range 0 5 .2 | ||
+ | $t2 = $t |pow 2 | ||
+ | $t3 = $t |pow 3 | ||
+ | $plt = New-Plot | ||
+ | $null = $plt.plot($t, | ||
+ | $null = $plt.SetChartSize(500, | ||
+ | $plt.show() | ||
+ | </ | ||
+ | Также см. папку Examples модуля.\\ | ||
+ | [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | # Добавление строки в файл Excel с порядковым номером | ||
+ | $order = (read-host " | ||
+ | $name = (read-host " | ||
+ | |||
+ | $path = " | ||
+ | $xlsx = (import-excel " | ||
+ | $c = $xlsx[-1].' | ||
+ | $obj = [PSCustomObject]@{ | ||
+ | ' | ||
+ | Тема = $order | ||
+ | Фамилия = $name | ||
+ | } | ||
+ | $xlsx += $obj | ||
+ | $xlsx |Export-Excel -Path $path -WorksheetName ' | ||
+ | |||
+ | <# По идее, надо добавлять строки, | ||
+ | $excel = Open-ExcelPackage $path | ||
+ | $sheet1 = $excel.Workbook.Worksheets[" | ||
+ | $newRowNum = $sheet1.Dimension.Rows + 1 | ||
+ | Set-Row -ExcelPackage $excel -WorksheetName $sheet1 -Row $newRowNum -StartColumn 1 -Value " | ||
+ | Set-Row -ExcelPackage $excel -WorksheetName $sheet1 -Row $newRowNum -StartColumn 2 -Value " | ||
+ | Set-Row -ExcelPackage $excel -WorksheetName $sheet1 -Row $newRowNum -StartColumn 3 -Value " | ||
+ | Export-Excel -ExcelPackage $excel | ||
+ | #> | ||
+ | </ | ||
+ | ===== Outlook ===== | ||
+ | <code powershell> | ||
+ | $Outlook = New-Object -ComObject Outlook.Application | ||
+ | $Namespace = $Outlook.getNamespace(" | ||
+ | |||
+ | $all_psts = $Namespace.Stores | Where-Object {($_.ExchangeStoreType -eq ' | ||
+ | |||
+ | ForEach ($pst in $all_psts){ | ||
+ | $Outlook.Session.RemoveStore($pst.GetRootFolder()) | ||
+ | } | ||
+ | </ | ||
+ | [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | Add-type -assembly " | ||
+ | $outlook = new-object -comobject outlook.application | ||
+ | $namespace = $outlook.GetNameSpace(" | ||
+ | dir “c: | ||
+ | </ | ||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== Outlook не подключается к серверу из-за старого протокола шифрования ==== | ||
+ | Проблема наблюдается: | ||
+ | - На Windows 7. Необходимо установить обновление [[https:// | ||
+ | - На Windows 8. Надо править реестр и убедиться, | ||
+ | <code dos> | ||
+ | taskkill /F /IM OUTLOOK.EXE /T | ||
+ | reg add " | ||
+ | reg add " | ||
+ | |||
+ | rem В документации почему-то 0xA80. | ||
+ | reg add " | ||
+ | reg add " | ||
+ | |||
+ | reg add " | ||
+ | reg add " | ||
+ | </ | ||
+ | |||
+ | |||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | ==== При запуске Outlook постоянно спрашивает логин и пароль ==== | ||
+ | Файл -> Параметры -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Параметры конфиденциальности -> снять галку с пункта Разрешить подключение Office к веб-службам, | ||
+ | File -> Options -> Trust Center -> Trust Center Settings -> Privacy Options -> Let Office connect to online services from Microsoft to provide functionality that's relevant to your usage | ||
+ | |||
+ | **GPO:** Конфигурация пользователя -> Административные шаблоны -> Microsoft Office 2016 -> Сервис | Общие | Параметры | Параметры служб -> Содержимое в сети -> Параметры контента в интернете -> Не разрешать Office подключаться к интернету | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Outlook не открывает ссылки DFS ==== | ||
+ | Внести нужный ресурс в доверенные сайты, например, | ||
+ | Конфигурация пользователя -> Политики -> Административные шаблоны -> Компоненты Windows -> Internet Explorer -> Панель управления браузером -> Вкладка " | ||
+ | '' | ||
+ | |||
+ | <WRAP round info 80%> | ||
+ | The syntax for adding a URL for files on FQDN or IP address paths to a GPO is different than manually adding a file URL to Internet Options | Security | Trusted Sites. You need to add three forward slashes '' | ||
+ | |||
+ | For example: | ||
+ | * Manually adding \\10.123.452.37 enters '' | ||
+ | * But for GPO you need to use the following syntax: '' | ||
+ | </ | ||
+ | |||
+ | Снять галку %%" | ||
+ | Конфигурация пользователя -> Политики -> Настройка -> Конфигурация Windows -> Реестр\\ | ||
+ | < | ||
+ | Reg Key: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2 | ||
+ | Value Name: Flags | ||
+ | Value Type: REG_DWORD | ||
+ | Value Data (in decimal): 67 (to uncheck) or 71 (to check) | ||
+ | </ | ||
+ | |||
+ | Убрать предупреждение в Outlook про опасную ссылку: | ||
+ | < | ||
+ | HKCU\software\policies\microsoft\office\16.0\common\security | ||
+ | DWORD: DisableHyperlinkWarning | ||
+ | Value: 1 | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ===== Word ===== | ||
+ | ==== Поиск в таблицах ==== | ||
+ | Необходим установленный Word. | ||
+ | <code powershell> | ||
+ | $filename = " | ||
+ | $search = ' | ||
+ | |||
+ | $wd = New-Object -ComObject Word.Application | ||
+ | $doc = ($wd).Documents.Open($filename) | ||
+ | $report = @() | ||
+ | |||
+ | $cTable = 1 | ||
+ | foreach ($table in $doc.Tables) { | ||
+ | $cRows = $table.Rows.Count | ||
+ | $cColumns = $table.Columns.Count | ||
+ | |||
+ | $cColumn = 1 | ||
+ | do { | ||
+ | $cRow = 1 | ||
+ | do { | ||
+ | if ($table.Cell($cRow, | ||
+ | $obj = [PSCustomObject]@{ | ||
+ | '№ таблицы' | ||
+ | '№ cтолбца' | ||
+ | '№ строки' | ||
+ | Строка = $table.Cell($cRow, | ||
+ | } | ||
+ | $report += $obj | ||
+ | } | ||
+ | $cRow++ | ||
+ | } until ($cRow -gt $cRows) | ||
+ | $cColumn++ | ||
+ | } until ($cColumn -gt $cColumns) | ||
+ | $cTable++ | ||
+ | } | ||
+ | $wd.Quit() | ||
+ | |||
+ | $report | ||
+ | </ | ||
+ | |||
+ | ==== Поиск и замена ==== | ||
+ | Необходим установленный Word, а также исходный файл, где нужно вставить уникальные значения для замены. | ||
+ | <code powershell> | ||
+ | function Replace-Word { | ||
+ | param($FindText, | ||
+ | $Word.Selection.Find.Execute($FindText, | ||
+ | $MatchWildcards, | ||
+ | $Wrap, | ||
+ | } | ||
+ | |||
+ | # -AsText - чтобы при импорте значения не интерпретировались (дроби не становились десятичными и т. п.) | ||
+ | $reestr = import-excel " | ||
+ | |||
+ | $reestr |% { | ||
+ | $_.Доля = $_.Доля -replace ' | ||
+ | if ($_.Доля -eq 2) {$_.Доля = 1} # ImportExcel почему-то 1 читает из таблицы как 2 | ||
+ | $_.ФИО = ($_.ФИО -replace ' | ||
+ | } | ||
+ | |||
+ | #$str = $reestr |? фио -eq ' | ||
+ | #$str = $reestr |? фио -eq ' | ||
+ | |||
+ | foreach ($str in $reestr) { | ||
+ | $path = " | ||
+ | cp " | ||
+ | |||
+ | $Word = new-object -ComObject Word.Application | ||
+ | $Word.Visible = $False | ||
+ | $doc = $Word.Documents.Open($path, | ||
+ | |||
+ | $wdFindContinue = 1 | ||
+ | $MatchCase = $False | ||
+ | $MatchWholeWord = $true | ||
+ | $MatchWildcards = $False | ||
+ | $MatchSoundsLike = $False | ||
+ | $MatchAllWordForms = $False | ||
+ | $Forward = $True | ||
+ | $Wrap = $wdFindContinue | ||
+ | $Format = $False | ||
+ | $wdReplaceNone = 0 | ||
+ | $wdFindContinue = 1 | ||
+ | $ReplaceAll = 2 | ||
+ | |||
+ | Replace-Word ' | ||
+ | Replace-Word ' | ||
+ | Replace-Word ' | ||
+ | Replace-Word ' | ||
+ | Replace-Word ' | ||
+ | |||
+ | $doc.Save() | ||
+ | $doc.SaveAs([ref]$($path -replace ' | ||
+ | $doc.Close() | ||
+ | |||
+ | $Word.Application.Quit() | ||
+ | |||
+ | } | ||
+ | |||
+ | # Сжать полученные файлы в архив | ||
+ | Compress-Archive -Path " | ||
+ | Compress-Archive -Path " | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ==== Модуль PSWriteOffice для Powershell ==== | ||
+ | [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | # Создание документа | ||
+ | $docFile = " | ||
+ | rm $docFile | ||
+ | $doc = New-OfficeWord $docFile | ||
+ | |||
+ | # Параграф | ||
+ | $p1 = New-OfficeWordText -Document $doc -Alignment Center -Text " | ||
+ | $p1 = $p1.AddBreak() # Перенос строки в том же параграфе | ||
+ | New-OfficeWordText -Document $doc -Paragraph $p1 -Text " | ||
+ | |||
+ | </ | ||
+ | |||
+ | Замена текста в документе | ||
+ | <code powershell> | ||
+ | $from = " | ||
+ | $to = " | ||
+ | |||
+ | $doc = Get-OfficeWord " | ||
+ | |||
+ | $doc.Paragraphs |% { | ||
+ | if ($_.text -match " | ||
+ | $_.text = $_.text -replace " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Save-OfficeWord -Document $doc -FilePath " | ||
+ | </ | ||
+ | ===== Альтернативные офисные приложения ===== | ||
+ | [[https:// | ||
+ | [[http:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||