Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[Powershell + excel] waarde uit bepaalde cell halen

Pagina: 1
Acties:

  • master_JE
  • Registratie: maart 2009
  • Laatst online: 12:36
goedemorgen,

ik heb de volgende code in powershell:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$File = "c:\computername.xlsx"

# Setup Excel, open $File and set the the first worksheet
$Excel = New-Object -ComObject "Excel.Application"
$Excel.visible = $true
$newci = [System.Globalization.CultureInfo]"en-US"
[system.threading.Thread]::CurrentThread.CurrentCulture = $newci
$Workbook = $Excel.workbooks.open($file)
$Worksheets = $Workbooks.worksheets
$Worksheet = $Workbook.Worksheets.Item(1)

#de te vinden waarde bepalen
$SearchString = "008064BE8A41"

#Zoeken in de rij naar de waarde
$Range = $Worksheet.Range("B1").EntireColumn
$Search = $Range.find($SearchString)

#Test of de waarde gevonden is
 if ( $Search.value -ne $null) {Write-Host "gevonden"}
  else {"niet gevonden"}

Nu wil ik als de waarde voor cell B4 gelijk is aan de searchstring, dan moet de waarde voor cell A4 getoond worden. ik kom er alleen niet uit hoe dit te doen??

  • Brakkie41
  • Registratie: november 2010
  • Laatst online: 21-05 00:27

Brakkie41

Erlang <3

Je zoekt nu in principe de gehele kolom B door, terwijl je eigenlijk enkel cell B4 wilt hebben. Even quick and dirty, heb even geen tijd om het voor je te testen, maar zo uit het hoofd zou onderstaande moeten werken.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
$SearchString = "008064BE8A41"

#Zoeken in de rij naar de waarde
$Search = $Sheet.Cells.Item(4,2).Text

#Test of de waarde gevonden is
if ( $Search -eq $SearchString) {
  Write-Host "Gevonden"
  $new_value = $Sheet.Cells.Item(4,1).Text
}
else {
  write-host "niet gevonden"
}

May the fun() be with you


  • Guillome
  • Registratie: januari 2001
  • Niet online
Hij weet natuurlijk niet of hij in B2 (wat zeggie) B4 of B5 of B100 (ze moeten ook altijd mij hebben) staat he :P

If then else matters! System
Portfolio! site


  • master_JE
  • Registratie: maart 2009
  • Laatst online: 12:36
Nee het is wel de bedoeling dat de gehele kolom B door zocht wordt, aangezien ik niet precies weet waar in kolom B die waarde staat. (@Guillome exactly :))

Is die Waarde gevonden in dus bijv. B4(B5/B12/B17) dan moet de waarde die in A4(A5/A12/A17 enz...) staat getoond worden op het scherm (Write-Host??).

master_JE wijzigde deze reactie 09-04-2014 15:34 (4%)


  • _js_
  • Registratie: oktober 2002
  • Laatst online: 22:14
Je hebt in Excel de LOOKUP functie, die zou je ook in Powershell moeten kunnen gebruiken.
$Excel.WorksheetFunction.Lookup(...) of zo. Wel even kijken of die helemaal aan jouw eisen voldoet.

  • midget
  • Registratie: maart 2001
  • Laatst online: 22:33
volgens mij ben je er met onderstaande code.
Let wel op, filename en SearchString aangepast.

Ik zoek eerst de cel (row en column) op.
Kolom C - Vervolgens doe ik de column +1 en schrijf de waarde weg.
Kolom A - Vervolgens doe ik de column -1 en lees deze waarde en plaats deze in variable $ReadItem

ik denk dat je nu 2 kanten op kan en wegschrijven in excel als je computer is gevonden en de juiste waarde in een andere column ophalen.

Succes!
C#:
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
$File = "C:\test.xlsx" 

# Setup Excel, open $File and set the the first worksheet 
$Excel = New-Object -ComObject "Excel.Application" 
$Excel.visible = $true 
$newci = [System.Globalization.CultureInfo]"en-US" 
[system.threading.Thread]::CurrentThread.CurrentCulture = $newci 
$Workbook = $Excel.workbooks.open($file) 
$Worksheets = $Workbooks.worksheets 
$Worksheet = $Workbook.Worksheets.Item(1) 

#de te vinden waarde bepalen 
$SearchString = "BB" 

#Zoeken in de rij naar de waarde 
$Range = $Worksheet.Range("B1").EntireColumn 
$Search = $Range.find($SearchString) 

#Test of de waarde gevonden is 
 if ( $Search.value -ne $null) {
 Write-Host $SearchString " gevonden in Column: " $Search.Column " en in Row " $Search.Row
 $Column2Write = $Search.Column + 1
 $Worksheet.Cells.Item($Column2Write,$Search.Row) = "Gevonden!" 
 $columA = $Search.Column - 1
 $ReadItem = $Worksheet.Cells.Item($Search.Row, $columA).Value()
 Write-Host $ReadItem
 } 
  else {"niet gevonden"}

midget wijzigde deze reactie 09-04-2014 22:49 (35%)


  • master_JE
  • Registratie: maart 2009
  • Laatst online: 12:36
Super bedankt _/-\o_ . dit is precies wat ik zoek. :)

  • voyager2018
  • Registratie: maart 2018
  • Laatst online: 14-11 09:03
Dit helpt mij ook bij mijn probleem. Ondanks dat het topic al ouder is wilde ik toch even kwijt dat de Row en Column in het laatste voorbeeld omgedraaid is
$Worksheet.Cells.Item($Column2Write,$Search.Row) = "Gevonden!" m/z
$Worksheet.Cells.Item($Search.Row,$Column2Write) = "Gevonden!"
Pagina: 1


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Smartphones

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True