Gjest Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Programmerer i VB.net og looper igjennom en excel-fil. Si at cellen inneholder: 1-butanol mens jeg ønsker å få en match på følgende: 1-butanol Butan-1-ol To andre eksempler Fra excel: Jern(III)nitrat (9 hydrat) Må matche: 846000-Jern(III)nitrat Fra excel: Jern(III)klorid 1000 g må matche: Jern(III)klorid Hvordan kan dette gjøres i VB.net? Kan vel kanskje bruke Range.Find? Tar i mot alle forslag og løsninger! Kan enten matche filnavn mot excel-verdi (loope igjennom filer) eller matche excel verdi mot filnavn. hva som er enklest.. EDIT: La til forslag Endret 26. april 2013 av Gjest Lenke til kommentar
FenrisC0de Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Du ønsker å sjekke om en string inneholder en annen string? Dim string1 As String Dim string2 As String string1 = "butanol" string2 = "butanol Butan-1-ol" if string2.contains(string1) Then //Do something End if Endret 26. april 2013 av Untouchab1e Lenke til kommentar
Gjest Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Takk for godt forslag, dessverre klarer den ikke å ta alt.. F.eks: Excel: Ammoniumkarbonat ren Filnavn: Ammoniumkarbonat EDIT: Ser nærmere på det... Endret 26. april 2013 av Gjest Lenke til kommentar
FenrisC0de Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Takk for godt forslag, dessverre klarer den ikke å ta alt.. F.eks: Excel: Ammoniumkarbonat ren Filnavn: Ammoniumkarbonat Dim string1 As String Dim string2 As String string1 = "Ammoniumkarbonat" string2 = "Ammoniumkarbonat ren" if string2.contains(string1) Then //Do something End if Dette burde fungere, men hvis det er omvendt (bytt om string1 og 2), så vil det ikke fungere. Hvis du vil sjekke begge veier må du kanskje gjøre noe slikt.. Dim string1 As String Dim string2 As String string1 = "Ammoniumkarbonat" string2 = "Ammoniumkarbonat ren" if string2.contains(string1) Or string1.contains(string2) Then //Do something End if Endret 26. april 2013 av Untouchab1e Lenke til kommentar
Gjest Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Per nå har jeg følgende kode: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click oXL = CreateObject("Excel.Application") oXL.Visible = False oWB = oXL.Workbooks.Open("D:\datablader\Datablad og nummer.xlsx") oSheet = oWB.Sheets(1) Dim datablader As New List(Of datablad) Dim di As New DirectoryInfo("D:\datablader\til-merking") Dim fiArr As FileInfo() = di.GetFiles() Dim fri As FileInfo For Each fri In fiArr findCell(fri.Name) Next oWB.Close() oXL.Quit() End Sub Public Function findCell(ByVal name As String) oRng = oSheet.Range("A2:A200") Dim rCell As Excel.Range For Each rCell In oRng.Cells Dim strNavn As Excel.Range = rCell.Offset(0, 0) Dim strNummer As Excel.Range = rCell.Offset(0, 1) If (Not (IsNothing(strNavn.Value)) And Not (IsNothing(strNummer.Value))) Then If (Not strNavn.Interior.ColorIndex = 35 And Not strNavn.Interior.ColorIndex = 38) Then If strNavn.Value.ToString.ToLower.Contains(name.ToLower) And name.ToLower.Contains(strNavn.Value.ToString.ToLower) Then Debug.WriteLine(strNavn.Value & " : " & name & " - " & strNummer.Value) End If 'datablader.Add(a) 'Debug.Print(strNavn.Value & " : " & strNummer.Value & " : " & strNavn.Interior.ColorIndex) End If End If Next rCell End Function Fungerer ikke så bra gitt.. Hadde jo på "release"-mode - så ingen debug.writeline. Skal se videre Endret 26. april 2013 av Gjest Lenke til kommentar
FenrisC0de Skrevet 26. april 2013 Del Skrevet 26. april 2013 (endret) Du har en liten bug.. Bruk Or, ikke And Public Function findCell(ByVal name As String) oRng = oSheet.Range("A2:A200") Dim rCell As Excel.Range For Each rCell In oRng.Cells Dim strNavn As Excel.Range = rCell.Offset(0, 0) Dim strNummer As Excel.Range = rCell.Offset(0, 1) If (Not (IsNothing(strNavn.Value)) And Not (IsNothing(strNummer.Value))) Then If (Not strNavn.Interior.ColorIndex = 35 And Not strNavn.Interior.ColorIndex = 38) Then If strNavn.Value.ToString.ToLower.Contains(name.ToLower) Or name.ToLower.Contains(strNavn.Value.ToString.ToLower) Then Debug.WriteLine(strNavn.Value & " : " & name & " - " & strNummer.Value) End If 'datablader.Add(a) 'Debug.Print(strNavn.Value & " : " & strNummer.Value & " : " & strNavn.Interior.ColorIndex) End If End If Next rCell End Function Endret 26. april 2013 av Untouchab1e Lenke til kommentar
Gjest Skrevet 26. april 2013 Del Skrevet 26. april 2013 Dessverre matcher ikke dette godt nok da det må være 100% korrekt. Ender nok med å bytte ut navn i excel henhold til filnavn på dokumentet, Lenke til kommentar
FenrisC0de Skrevet 26. april 2013 Del Skrevet 26. april 2013 Matchingen burde fungere smertefritt, da dette er hva compare-funksjonen gjør. Mistenker at du har noe feil i datamaterialet ditt jeg Lenke til kommentar
torbjørn marø Skrevet 1. juni 2013 Del Skrevet 1. juni 2013 Fra excel: Jern(III)nitrat (9 hydrat) Må matche: 846000-Jern(III)nitrat Her vil du ikke kunne få noen match basert på det du har sagt - ingen av strengene er en substreng av den andre. Så hva er reglene for gyldig matching? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå