0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19

Скрипт редактирования Excel и гиперссылки

06.11.2022, 15:16. Показов 2537. Ответов 35

Студворк — интернет-сервис помощи студентам
Всем привет
Прошу помочь у меня уже чайник кипит ))
Неделю как учу Powershell и начал с создание скриптов мелких ( принтер, сетевой диск по примерам с интернета)
Задача такая ребята и нужна ваша помощ

Нужно открыть ексель файл в powershellise .
Там таблица из 6 столбцов
Пример моей таблицы в ексель

"Folder name" "PNG Name" "Current Date Created" "Folder name" "PNG" "Previous Date Created"
"1RFO" "1111.png" "11/1/2022 1:09:05 PM" "1RFO" "1111.png" "11/1/2022 1:09:05 PM"
"2RFO" "1113.png" "11/1/2022 1:09:28 PM" "2RFO" "1113.png" "11/1/2022 1:09:28 PM"
"3RFO" "1112.png" "11/1/2022 1:09:44 PM" "3RFO" "1112.png" "11/1/2022 1:09:44 PM"
"4RFO" "1114 - Copy (2).png" "11/1/2022 1:09:57 PM" "4RFO" "1114 - Copy (2).png" "11/1/2022 1:09:57 PM"
"4RFO" "1114 - Copy (3).png" "11/1/2022 1:09:57 PM" "4RFO" "1114 - Copy (3).png" "11/1/2022 1:09:57 PM"
"4RFO" "1114 - Copy (4).png" "11/1/2022 1:09:57 PM" "4RFO" "1114 - Copy (4).png" "11/1/2022 1:09:57 PM"
"4RFO" "1114 - Copy (5).png" "11/1/2022 1:09:57 PM" "4RFO" "1114 - Copy (5).png" "11/1/2022 1:09:57 PM"

Прошу помочь скрипт которые сейчас я имею и извините за граматику русский плохо знаю
Это данные из 2 папок в одном обновленные картинки в другом старые, но прикол в том что обновлены не все, а пару картинок из разных папок. Прикол в том что сканирование папки со старыми картинками выдаст весь список, а мне нужны только обновленные.
Я вытащил данные затем, записал на csv формат затем все запихал в 1 ексель файл.
Теперь мне нужно удалить PNG которые не дублируются в колонне PNG Name то-есть и данные которые выдает ("Folder name" "PNG""Previous Date Created") а если дублируются имя то удалить только все колонну PNG, но сделать гиперссылки на нее по дате созданию то-есть колонна "Previous Date Created"
Прошу помочь скрипт которые сейчас я имею и извините за грамматику русский плохо знаю

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Get-ChildItem -path 'C:\Users\dni38816\Desktop\test\testsprnew\*.png' -Recurse |  Select-Object -Property @{Label="Folder name"; Expression=({$_.FullName.Substring(0,$_.FullName.LastIndexOf('\')).Substring($_.FullName.Substring(0,$_.FullName.LastIndexOf('\')).LastIndexOf('\')+1)})}, @{Label="PNG Name"; Expression=({$_.Name})}, @{Label="Current Date Created";Expression=({$_.LastWriteTime})} | Export-csv C:\Users\dni38816\Desktop\test\testnew.csv
Get-ChildItem -path 'C:\Users\dni38816\Desktop\test\TESTSPRNEW\*.png' -Recurse |  Select-Object -Property @{Label="Folder name"; Expression=({$_.FullName.Substring(0,$_.FullName.LastIndexOf('\')).Substring($_.FullName.Substring(0,$_.FullName.LastIndexOf('\')).LastIndexOf('\')+1)})}, @{Label="PNG"; Expression=({$_.Name})}, @{Label="Previous Date Created";Expression=({$_.LastWriteTime})} | Export-csv C:\Users\dni38816\Desktop\test\testold.csv
$import = get-content C:\Users\dni38816\Desktop\test\testnew.csv
$import | Select-Object -Skip 1 | Set-Content C:\Users\dni38816\Desktop\test\testnew.csv
$import2 = get-content C:\Users\dni38816\Desktop\test\testold.csv
$import2 | Select-Object -Skip 1 | Set-Content C:\Users\dni38816\Desktop\test\testold.csv
 
$SourcePath1 = "C:\Users\dni38816\Desktop\test\testnew.csv"
$SourcePath2 = "C:\Users\dni38816\Desktop\test\testold.csv"
$DestinationPath = "C:\Users\dni38816\Desktop\TEST\1.xlsx"
$deleimter= ","
$SourceTxt = Get-Content $SourcePath1
$xlsxFile = $DestinationPath + "1.xlsx"
if (Test-Path ($xlsxFile))
{
  Remove-Item $xlsxFile
}
$xl=New-Object -ComObject "Excel.Application"
$wb=$xl.Workbooks.Add()
$ws=$wb.ActiveSheet
$xl.Visible=$false
$cells=$ws.Cells
$Content = Get-Content $SourcePath1
$Content2 = Get-Content $SourcePath2
$numOfRows = $Content.Length
$numOfRows2 = $Content2.Length
$numOfColumns = $Content[3].split($deleimter).Count
$numOfColumns2 = $Content2[3].split($deleimter).Count
for ($i=0; $i -lt $numOfRows ;$i++)
{
  $rowData = $Content[$i].split($deleimter)
  for ($j=0; $j -lt $numOfColumns; $j++)
  {
    $cellData = $rowData[$j]
    $cells.item($i+1,$j+1) = $cellData
  }
}
for ($i=0; $i -lt $numOfRows2 ;$i++)
{
  $rowData2 = $Content2[$i].split($deleimter)
  for ($j=0; $j -lt $numOfColumns2; $j++)
  {
    $cellData = $rowData2[$j]
    $cells.item($i+1,$j+4) = $cellData
  }
}
 
$xl.Cells.EntireColumn.AutoFit()
$xl.Cells.EntireColumn.AutoFilter()
$xl.Rows.Item(4).Font.Bold = $false
$xl.Range("A1:F1").font.size = 14
$xl.Rows.Item(4).Interior.ColorIndex = 2
$xl.Range("A1:F50").Borders.LineStyle = 1
$xl.Range("A1:F1").font.size = 14
$xl.Range("A1:F1").font.bold = $true
$xl.Range("A1:F4").HorizontalAlignment = -4108
$xl.Range("A1:F4").VerticalAlignment = -4108
$wb.SaveAs($xlsxFile) 
$wb.Close()
xl.Quit()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2022, 15:16
Ответы с готовыми решениями:

Гиперссылки в excel
Доброго времени суток Есть файл excel в котором есть гиперссылки на другие файлы excel После отключения питания компьютера, в...

Ссылки, гиперссылки Excel
У нас есть таблица в Excel, в ней указаны идентификаторы, все уникальные без повторов. Возможно ли реализовать при вводе любого...

Эффективные гиперссылки из Excel?
Не раз замечал, что Яндекс кроме html-текста на странице индексирует еще и документы excel размещенные на сайте. Например прайс-листы....

35
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
07.11.2022, 15:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dnichshev Посмотреть сообщение
Надо учить английский
Хорошее дело!
А ещё, надо учить алгоритмы или хотя бы, учиться правильно составлять задачу... способ решения - это уже за теми, кто попытается помочь.
В Вашем описании, после нескольких попыток разобраться, что же требуется, лично я запутался и кроме того, что там описан предполагаемый способ её решения, реально, ничего не понял, увы.

Добавлено через 3 минуты
Цитата Сообщение от alhaos Посмотреть сообщение
так что тут встает вопрос кто лучше понял твое высказывание ты сосредоточенный на его логической составляющей или оппонент читающий метаданные между строк.
Хмм, это феноменально... мое же высказывание... переданное через обезличенный текст... лучше понял тот, кто читает между строк, а не я сам? Феноменально таки!
Но у каждого есть право на свое мнение, тут я согласен...
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
07.11.2022, 15:22
Dnichshev,
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Linq
 
param (
    $Dir1 = "c:\tmp\dir1",
    $dir2 = "c:\tmp\dir2"
)
 
 
class MyMegaClass{
    [string]$Filepath
    [string]$Hash
}
 
$List1 =[List[MyMegaClass]]::new()
$List2 =[List[MyMegaClass]]::new()
 
foreach ($file in [Directory]::GetFiles($Dir1, '*.*', [SearchOption]::AllDirectories)) {
    $List1.Add(
        [MyMegaClass]@{
            Filepath = $file
            Hash = (Get-FileHash $file -Algorithm SHA256).Hash
        }
    )
}
 
foreach ($file in [Directory]::GetFiles($Dir2, '*.*', [SearchOption]::AllDirectories)) {
    $List2.Add(
        [MyMegaClass]@{
            Filepath = $file
            Hash = (Get-FileHash $File -Algorithm SHA256).Hash
        }
    )
}
 
$dupHash = [Enumerable]::Intersect([string[]]$List1.Hash, [string[]]$List2.Hash)
# Тут ты получил список хешей файлов с дублями
 
$List1.Where{$_.Hash -in $dupHash}
# Тут ты получил список объектов с такими хешами из первого списка
# И вопрос: "Что же с ними делать?"
Добавлено через 8 минут
Цитата Сообщение от YuS_2 Посмотреть сообщение
Хмм, это феноменально...
когда я слышу от своего ребенка "Папа я хочу есть" в 10 вечера зная, что покормил его не так давно, и что ему надо спать, я читая между строк понимаю что есть то он совсем не хочет, а хочет не спать... как бы он там в своей голове не убеждал себя, что хочет есть.
Или человек который говорит "Дядя дай денежку мне очень надо", каким то шестым чувством понимаю, что ему надо работать, как бы он там в своей голове на думал "что работать ему не надо, а надо просто просить денежку у людей и ему дадут", так что я тоже оставляю за собой право понимать высказанные мнения в своей интерпретации, а не в интерпретации автора.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
07.11.2022, 15:25
Цитата Сообщение от alhaos Посмотреть сообщение
так что я тоже оставляю за собой право понимать высказанные мнения в своей интерпретации, а не в интерпретации автора.
Это уже из области философии... науки (некоторые таки её считают наукой) неточной, в отличие от... где такие допущения неприемлемы.
Но как и сказал выше:
Цитата Сообщение от YuS_2 Посмотреть сообщение
у каждого есть право на свое мнение, тут я согласен...
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
07.11.2022, 15:39
YuS_2, Я шизоид и был бы счастлив возможности игнорировать эмоциональную часть в человеческом общении, но наличие ее факт, а факт вещь упрямая, и считаю, что игнорирование фактов вещь ... ну как минимум бессмысленная и более того небезопасная так скажу...
0
07.11.2022, 15:42
 Комментарий модератора 
Господа, давайте жить дружно
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
07.11.2022, 15:55
то ли я теряю связь с реальностью..., то ли реальность меня не понимает, где я проявил агрессию?
0
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19
08.11.2022, 07:12  [ТС]
У меня есть программа типа Автокад и я делаю скриншот в ней скажем 1 труба задаю имя 43truba1.png и кидаю в папку 1 участок. Потом мне говорят что модели обновились и я создаю еще один скриншот но после открытия этой модели снова он уже с 2 трубами я делаю скриншот снова и задаю ему то же самое имя 43truba1.png и теперь мне нужно удалить старую фотку и заменить его на новую. Но прикол в том может так произоити что он уже после обновления он поменял участок и папку соотвецтвено на папку участок 2.
Как я понял хэш задаеться при создания и если он был изменен меняеться а если его пересоздали то как быть ? Если возможность добавить в код еще одно условия в виде имени обьекта?

Добавлено через 2 часа 5 минут
Одним словом файл меняет хэш по этому он мне не нужен. Мне нужно сверить по папки1 папку 2 по имени фаила игнорируя подпапки чтобы сделать потом гиперссылки на нее на старую и новую картинку. По папки 1 так как в папке 2 много других картинок и выводить ее не вариант
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
08.11.2022, 09:11
Dnichshev, я так понял, что русский у тебя не основной язык, уточни пожалуйста:

> Но прикол в том может так произоити что он уже после обновления он поменял участок и папку соотвецтвено на папку участок 2.

Кто "он"?

хеш это контрольная сумма последовательности байтов, если совпадают контрольные суммы то в очень высокой долей вероятности совпадают и последовательности байтов контрольные суммы которых посчитаны


PowerShell
1
Get-ChildItem -Recurse -File| Get-FileHash
Code
1
2
3
4
5
6
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          B48F4EC76364578A8642975EA38A6997BF3A76CC51E931F44C81768ABBB93394       C:\tmp\changelog
SHA256          B48F4EC76364578A8642975EA38A6997BF3A76CC51E931F44C81768ABBB93394       C:\tmp\changelog1
SHA256          B48F4EC76364578A8642975EA38A6997BF3A76CC51E931F44C81768ABBB93394       C:\tmp\Dir1\changelog
SHA256          43E0F7C52021EB79FC9466EA38254C96CEEE7689F01BE2EF68C32CCE421758D7       C:\tmp\Dir2\changelog
файлы C:\tmp\changelog и C:\tmp\changelog1 имеют разное название, но одинаковое содержание соотвественно один и тот же хеш

файлы C:\tmp\Dir1\changelog и C:\tmp\Dir2\changelog имеют одинаковые имена и разное содержание соотвественно разные хеш
0
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19
08.11.2022, 11:02  [ТС]
Картинка с названием 1.png создаеться в программе типо Автокад Затем человек который рисует говорит мне что добавил туда трубу и я открываю автокад гружу модели и делаю чнимок уже с 2 трубами. Но название назначаю ту же 1.png. Теперь мне нужно сканировать папку с новыми картинками и сопостави картинками в другой вывести одинаковые в ексель либо csv

Добавлено через 43 секунды
тоесть картинка создаеться новая а не переделывает старую

Добавлено через 34 минуты
Get-ChildItem -path 'C:\Users\dni38816\Desktop\test\testsprn ew\*.png' -Recurse | Select-Object -Property @{Label="Folder name"; Expression=({$_.FullName.Substring(0,$_. FullName.LastIndexOf('\')).Substring($_. FullName.Substring(0,$_.FullName.LastInd exOf('\')).LastIndexOf('\')+1)})}, @{Label="PNG"; Expression=({$_.Name})}, @{Label="Current Date Created";Expression=({$_.LastWriteTime}) }
Как добавить label без значения ?
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
08.11.2022, 11:25
Лучший ответ Сообщение было отмечено Dnichshev как решение

Решение

Dnichshev, это?
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$Dir1Files = Get-ChildItem -Recurse -File "C:\tmp\Dir1"
$Dir2Files = Get-ChildItem -Recurse -File "C:\tmp\Dir2"
 
. {
    foreach ($origFile in $Dir1Files) {
        foreach ($copyFile in $Dir1Files) {
            if ($origFile.Name -EQ $copyFile.Name) {
                [pscustomobject]@{
                    OrigFile = $origFile.FullName
                    CopyFile = $CopyFile.FullName
                }
            }
        }
    }
} | Export-Csv out.csv
1
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19
08.11.2022, 11:33  [ТС]
Можешь помочь с гиперссылкой о гуру )))
как добавить в повершеле в созданный ексель гиперсылку
картинка 1
картинка 2
картинка 3

и когда в ексель нажмешь на него он открывает с папки эту картину )
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
08.11.2022, 11:38
Dnichshev, я эксель не знаю а учить не хочу
1
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19
08.11.2022, 11:39  [ТС]
спасибо огромное Рахмет выручил )))))))))
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
08.11.2022, 11:40
Dnichshev, считаю, что применение экселя в любых решениях, это такая полумера которая потом тебе же выстрелит в ногу
0
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 19
08.11.2022, 11:43  [ТС]
В поуершеле создаю ексель теперь буду искать как гиперссылки вставить в екселе знаю а как это через поуершел хз просторы интернета буду бороздить ))) Рахмет за скрипт от души бро
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
08.11.2022, 12:01
Dnichshev, "зур ус"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2022, 12:01

Извлечение гиперссылки из Excel
Код на извлечение данных из столбца excel. А как извлечь не текст а его гиперссылки????? Dim MyConnection As...

Гиперссылки на лист в Excel Online
Здравствуйте! Сталкивался ли кто-нибудь с гиперссылками на лист или ячейку Excel Online? Складывается впечатление, что это невыполнимая...

Добавление гиперссылки в документ Excel
Здравствуйте! Приложение на C# генерирует документ Excel, в который выводятся UNC пути ко всем файлам, расположенным, например, в папке...

Excel переход по листам в виде гиперссылки
Dear All В экселе первый лист - список листов xls книги с описанием каждой. Можно ли сделать эти строки описания в виде гиперссылки с...

Range работа с диапазоном в Excel - добавление гиперссылки
Не определяется Range У меня такой вот код Как "вписать" в него метод добавления гиперссылки в колонку В файла ексель? class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Опции темы

Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru