View Single Post
Staro 02.09.2016., 10:50   #1
Vuco
Moderator
Moj komp
 
Vuco's Avatar
 
Datum registracije: Dec 2004
Lokacija: Zagreb, Tresnjevka
Postovi: 9,505
Visual studio + excel; korištenje funkcija excela unutar Visual Studia (MATCH)

Pozdrav,

Imam jedan glupi problem unutar Visual Studia 2015 kojeg ne mogu riješiti. Imam Excel tablicu koja se sastoji od 16 redova i dvije kolumne ("tip" i "id").



Unutar Visual Studia 2015 sam generirao kod koji treba uzeti podatke iz tablice i generirati jednostavan XML file.

Ono što me muči jest kako da iskoristim unutar VS-a funkciju MATCH iz Excela ? Puca mi na njemu kod, a ne znam di je problem ?
Uzmite u obzir da ne znam programirati, ali je silom prilika bilo potrebno da sam napišem softver za povezivanje 2 CAD softvera u 2 dana, pa je google radio punom parom i ima svega u kodu (različitih stilova programiranja ).

Error koji dobijem:


Code:
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Dim excelApp As Application
        Dim wb As _Workbook
        Dim ws As _Worksheet


        ' Postavljanje varijable na My Documents path.
        Dim mydocpath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

        ' excel application referenca
        excelApp = New Application
        excelApp.Visible = True
        excelApp.ScreenUpdating = True

        ' Otvaranja excela
        wb = excelApp.Workbooks.Open(Path.Combine(mydocpath, "Book1.xlsx"))

        ' referenca na sheet broj 1
        ws = wb.Worksheets(1)

        'Traženje dimenzija tablice (koliko ima redova i kolumni)
        Dim LastCol As Long
        Dim LastRow As Long
        Dim i As Integer

        LastCol = ws.UsedRange.SpecialCells(XlCellType.xlCellTypeLastCell).Column
        LastRow = ws.UsedRange.SpecialCells(XlCellType.xlCellTypeLastCell).Row


        ' Napiši pocetni tekst u test.XML
        Dim startlines() As String = {"Ovo je početak XML-a",
            "Dalje slijede podaci iz excel tablice",
            ""}

        'Write the beginning fixed string array to a New file named "text.xml".
        Using outputFile As New StreamWriter(mydocpath & Convert.ToString("\test.xml"))
            For Each startline As String In startlines
                outputFile.WriteLine(startline)
            Next
        End Using


        'POČETAK DINAMIČKOG ZAPISIVANJA XML-a iz TABLICE!
        For i = 2 To LastRow
            Dim id As String
            Dim type As String


            'Povezivanje varijabli sa ćelijama u Excelu
            type = ws.Range("A" & i).Value.ToString
            id = ws.Range("B" & i).Value.ToString

            'template sklopova u "test.XML"
            If type = "sklop" Then
                Dim sklops() As String = {
               "<object>",
               "<type=""Sklop"" id=""" & id & """>",
               "  <Name>Sklop" & id & "</Name>",
               " </type>",
               " </object>"}

                'Zapisi sklopve u "test.xml".
                Using fs As StreamWriter = File.AppendText(mydocpath & Convert.ToString("\test.xml"))
                    For Each sklop As String In sklops
                        fs.WriteLine(sklop)
                    Next
                End Using

                Dim jot As Integer
                Dim TrenutniComponent As String
                Dim TrenutniId As String


                Dim brojpartova As Double

                brojpartova = excelApp.WorksheetFunction.Match("sklop", "A3:A16", 0)

                For jot = 1 To brojpartova

                    TrenutniComponent = excelApp.Cells(i + jot, 1).Value
                    TrenutniId = excelApp.Cells(i + jot, 2).Value

                    Dim parts() As String = {
               "<object>",
               "<type=""Part"" id=""" & id & """>",
               "  <Name>Part" & id & "</Name>",
               " </type>",
               " </object>"}

                    'Write additional info to "test.xml".
                    Using fs As StreamWriter = File.AppendText(mydocpath & Convert.ToString("\test.xml"))
                        For Each part As String In parts
                            fs.WriteLine(part)
                        Next
                    End Using
                Next
            End If
        Next
        excelApp.Quit()

    End Sub
MATCH Funkcija mi je dobrodošla i koristim je da mi nađe relativnu poziciju (naprema trenutnoj) sljedećeg sklopa u tablici, a time zapravo dobivam broj partova unutar jednog sklopa. Tehnički nisam mogao naći funkciju koja će mi dati broj istih ćelija za redom osim nje.

Kod nije do kraja napisan (iz razloga što se uvijek traži od A3:A16 MATCH a trebalo bi od Ai pa koliko treba). No ako prođe tu, onda ću znati i za ubuduće.

P.S. Naravno da sam kao prava noobara napravio gumbek koji to sve radi jer onda izgleda kod profesionalno

Sve imate u attachmentu! Book1.xlsx treba biti u My Documents folderu.

Hvala na pomoći i pozdrav


EDIT:
Jesam li ja to krivo koristio input za Range A3:A16 ? Nešto sam sad načačkao i prošlo je, odnosno dobio sam vrijednost ?
Naravno morao sam staviti i excelApp.Match bez WorksheetFunction između.
__________________
"Everything with a heartbeat can knock you down"

Zadnje izmijenjeno od: Vuco. 02.09.2016. u 11:05.
Vuco je offline   Reply With Quote