|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Копирование диапазона ячеек из одной таблицы Excel в другую |
|
PowerShell - [решено] Копирование диапазона ячеек из одной таблицы Excel в другую
|
Пользователь Сообщения: 144 |
Здравствуйте.
Появилась необходимость автоматизировать SUBJ. Исходные данные: Таблица-источник - "table1.xls" Таблица-приёмник - "table2.xls" Название листа (одинаково для обеих таблиц) - "Товарная база" Диапазон для копирования - "A7:CY1006" Место вставки - "A7" Написал следующий скрипт: Param( $path1 = "table1.xls", $path2 = "table2.xls", $worksheet1 = "Товарная база", $worksheet2 = "Товарная база", $range1 = "A7:CY1006", $range2 = "A7" ) $Excel = New-Object -ComObject excel. Application $Excel.visible = $false $Workbook = $excel.Workbooks.open($path1) $Worksheet = $Workbook.WorkSheets.item($worksheet1) $worksheet.Activate() $range = $WorkSheet.Range($range1).EntireColumn $range.Copy() | Out-Null $Workbook = $excel.Workbooks.open($path2) $Worksheet = $Workbook.Worksheets.item($worksheet2) $worksheet.Activate() $Worksheet.Range($range2).Activate() $Worksheet.Paste() $workbook.Save() $Excel.Quit() Remove-Variable -Name excel [gc]::collect() [gc]::WaitForPendingFinalizers() Цитата:
Подскажите, что я сделал не правильно? |
||
Отправлено: 12:04, 25-03-2024 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 16:20, 25-03-2024 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 16:38, 25-03-2024 | #3 |
fascinating rhythm Сообщения: 6565
|
Профиль | Отправить PM | Цитировать Кстати, ImportExcel не работает с .xls, только с .xlsx.
Что касается задачи - неплохо бы иметь сам файл, хотя бы что-то похожее, т. к. требовать от советчиков рисовать ещё и файл - это немного чересчур. Непонятно ведь, что там за диапазон такой и т. д. |
------- Отправлено: 16:48, 25-03-2024 | #4 |
Пользователь Сообщения: 144
|
Профиль | Отправить PM | Цитировать Отдельное спасибо за ImportExcel. В данной задаче не поможет, но есть масса других сфер применения.
Задачу решил. Мало ли кому пригодится, поэтому выкладываю решение. Param( $path1 = "Путь_к_файлу_из_которого_копируем.xls", $path2 = "Путь_к_шаблонному_файлу.xlsx", $path3 = "Путь_к_результирующему_файлу.xlsx", $worksheet1 = "Товарная база", $worksheet2 = "Товарная база", $range1 = "A7:CY1006", $range2 = "A7", $range3 = "CZ7:CZ1006", $range4 = "DA7", $range5 = "CZ7", $country = "Беларусь [112]" ) Copy-Item $path2 $path3 $excel = New-Object -ComObject Excel.Application $workbookSource = $excel.Workbooks.Open($path1) $rangeToCopy = $workbookSource.Worksheets[$worksheet1].Range($range1) $workbookTarget = $excel.Workbooks.Open($path3) $targetSheet = $workbookTarget.Worksheets[$worksheet2] $rangeToCopy.Copy($targetSheet.Range($range2)) $rangeToCopy = $workbookSource.Worksheets[$worksheet1].Range($range3) $rangeToCopy.Copy($targetSheet.Range($range4)) $rangeToFill = $targetSheet.Range($range5) $rangeToFill.Value = $country $workbookTarget.Save() $workbookSource.Close() $workbookTarget.Close() $excel.Quit() Понимаю, что решение - "костыль", но это гораздо лучше, чем вручную копипастить такое количество строк и столбцов. |
|
Отправлено: 16:59, 25-03-2024 | #5 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать Цитата Serguei Kouzmine:
Цитата DJ Mogarych:
![]() |
||
------- Отправлено: 17:24, 25-03-2024 | #6 |
Crazy Сообщения: 1176
|
Профиль | Отправить PM | Цитировать и да, в составе ImportExcel есть командлет ConvertTo-ExcelXlsx, правда наличие Excel тогда необходимо, ибо он работает через -ComObject
Цитата avolkov2009:
|
|
------- Отправлено: 19:03, 25-03-2024 | #7 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать Цитата avolkov2009:
|
|
Отправлено: 21:48, 25-03-2024 | #8 |
fascinating rhythm Сообщения: 6565
|
Профиль | Отправить PM | Цитировать YuS_2, ну да, для меня-то проблемы нет, я давно уже переделал все старые форматы. Новый формат ещё и компактнее.
Вопрос, все ли готовы так делать и какие там подводные камни и обстоятельства у автора. |
------- Отправлено: 16:04, 26-03-2024 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Копирование файла из одной папки в другую в определенные интервалы времени (bat) | pinguindell | Скриптовые языки администрирования Windows | 16 | 11-08-2019 22:03 | |
2010 - Экспорт данных из одной книги excel в другую | Tyamich | Microsoft Office (Word, Excel, Outlook и т.д.) | 5 | 27-10-2016 16:31 | |
Автоматическое копирование файлов из одной папки в другую. | another_user | Хочу все знать | 4 | 25-09-2015 12:50 | |
Любой язык - Копирование таблицы (2 столбца) из файла .htm в Excel | Serg2010 | Скриптовые языки администрирования Windows | 2 | 05-08-2015 22:18 | |
Разное - как на vba написать печать выделенного диапазона ячеек excel? | Ingolder | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 13-10-2010 00:51 |
|