[Powershell + excel] waarde uit bepaalde cell halen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • master_JE
  • Registratie: Maart 2009
  • Laatst online: 20:09
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??

Acties:
  • 0 Henk 'm!

  • Swedish Clown
  • Registratie: November 2010
  • Laatst online: 10-04 22:41

Swedish Clown

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"
}

Always looking for developers wanting to work with Erlang.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

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! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • master_JE
  • Registratie: Maart 2009
  • Laatst online: 20:09
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??).

[ Voor 4% gewijzigd door master_JE op 09-04-2014 15:34 ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18:05
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.

Acties:
  • 0 Henk 'm!

  • midget
  • Registratie: Maart 2001
  • Laatst online: 07-07 07: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"}

[ Voor 35% gewijzigd door midget op 09-04-2014 22:49 ]


Acties:
  • 0 Henk 'm!

  • master_JE
  • Registratie: Maart 2009
  • Laatst online: 20:09
Super bedankt _/-\o_ . dit is precies wat ik zoek. :)

  • voyager2018
  • Registratie: Maart 2018
  • Laatst online: 02-05-2023
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