progs:msoffice
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версия | |||
| progs:msoffice [30.07.2024 19:21] – внешнее изменение 127.0.0.1 | progs:msoffice [26.04.2025 19:36] (текущий) – [Альтернативные офисные приложения] viacheslav | ||
|---|---|---|---|
| Строка 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:// | ||
| + | [[https:// | ||
