Προς το περιεχόμενο

Ερωτήσεις για Visual Basic


Star_Light

Προτεινόμενες αναρτήσεις

Ακριβως αυτό μου δουλέυει..... όταν ανοιξω μετα τη ΒΔ, οι τιμες ειναι ενημερωμένες.....

 

Σου ανεβαζω ενα αρχειο, εχει ενα exe που εκανα εγω, μαζι με τα αρχεια που χρησιμοποιησα

Η επιλογη των αρχειων γινεται με OpenFileDialogs

Δοκιμασε να το τρεξεις μπας και φταιει κατι άλλο.....

 

https://rapidshare.com/files/2217921892/tmp.zip

 

και εδω ο κωδικας (με τα OpenFileDialogs)

>
Imports Microsoft.Office.InteropImports
Imports Microsoft.Office.Core.MsoTriState
Imports Microsoft.Office.Interop.PowerPoint
Imports Microsoft.Office.Interop
Imports System.Data.OleDbModule
Imports System.Data.OleDb
Imports System.Windows.Forms

Module Module1
   Sub Main()
    Dim myApp = New PowerPoint.Application()
    myApp.Visible = msoTrue
    Dim pptFilePath = "C:\tmp\Trials.pptx"
    Dim dlg As New OpenFileDialog
    dlg.Filter = "PowerPoint (*.pptx)|*.pptx"
    dlg.InitialDirectory = "c:\"
    If dlg.ShowDialog() = DialogResult.OK Then
	    pptFilePath = dlg.FileName
    End If
    Dim MyPresentation = myApp.Presentations.Open(pptFilePath, msoTrue, msoTrue, True)
    ' get the first slide
    Dim MyFirstSlide = MyPresentation.Slides(1)
    Dim sqlQueries As New ArrayList
    Dim sqlres As String
    Try
	    For i = 1 To MyFirstSlide.Shapes.Item(1).Table.Rows.Count
		    Dim row = MyFirstSlide.Shapes.Item(1).Table.Rows.Item(i)
		    'Get desired values from ppt table
		    Dim firstColVal = row.Cells(2).Shape.TextFrame.TextRange.Text.Trim()
		    Dim secondColVal = row.Cells(3).Shape.TextFrame.TextRange.Text.Trim()
		    'Build the sql update command for the db
		    Console.WriteLine("This is val of secondColVal " + secondColVal)
		    Console.WriteLine("This is val of firstColVal " + firstColVal)
		    sqlQueries.Add("UPDATE SHIPS SET PROBLEMS = '" & secondColVal & "' WHERE NAME='" & firstColVal & "'")
	    Next
	    Dim dbPath = "C:\tmp\database.accdb"
	    Dim dlg1 As New OpenFileDialog
	    dlg1.Filter = "Access (*.accdb)|*.accdb"
	    dlg1.InitialDirectory = "c:\"
	    If dlg1.ShowDialog() = DialogResult.OK Then
		    dbPath = dlg1.FileName
	    End If
	    'MSAccess stuff
	    'Open connection to db
	    Dim connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data source=" & dbPath)
	    connection.Open()
	    'Perform each query one-by-one
	    For Each query In sqlQueries
		    Dim cmd = New OleDbCommand(query, connection)
		    Dim icount = cmd.ExecuteNonQuery
	    Next
	    'Close connection
	    connection.Close()
    Catch ex As Exception
	    MsgBox(ex.Message)
    End Try
    MyPresentation.Close()
   End Sub
End Module

 

Πω ρε φιλε... κατι τετοιες ωρες γουσταρω C γιατι θα ειχα βρει το προβλημα σε κωδικα χωρις να ζαλιζω τον κοσμο εδω και ποσες μερες. Ουτε ενας κώδικας απο αυτους που έχει δωσει ο migf1 τελευταια δεν μου έχει ξεφυγει στο tracing. Εδω τωρα με αυτο παιδευομαστε ποσες μερες.... αισχος ! Και δεν μπορω ουτε το loop να αλλαξω για να έχει παραπανω διαφάνειες... ελεος

 

Γιατι δεν το κανεις στη C τότε;

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 98
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

E ξεκινησε σε VB τωρα να το αλλαξω? αφου τελειωνουμε τωρα. :P

 

Παντως ενω έχεις κανει import το namespace

 

System.Windows.Forms

 

Εμενα συνεχιζει να μου βγαζει συντακτικα σφάλματα οτι δεν έχει οριστει ο τυπος OpenFileDialog

και το DialogResult .

 

Εσενα πως σου παιζουν ολα με την μια δεν μπορω να καταλαβω !

 

Έχω και reference σε εκδοση 14.0 του MS.

 

P.S Το δικο σου προγραμμα οντως δουλευει το δοκιμασα τωρα . Ελεος... και σε μενα κανει ενα καρο νουμερα

και εχουν τον ιδιο ακριβως κωδικα. Aπλα πριν κατεβασω το δικο σου zip εκανα paste τον κώδικα στο δικο μου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ε ναι, ειπαμε, δεν ειναι μονο ο κωδικας, Ειναι και τα references και σε αλλες περιπτωσεις διαφορα settings που μπορει να εχεις στο project σου.

Για το OpenFileDialog και το DialogResult χρειαζεται και reference στο System.Windows.Forms και δε ξερω τι άλλο. Εγω αυτο που κανω πάντα ειναι να προσθετω απο το menu μια νεα φορμα στο προτζεκτ, οποτε αυτοματα προστιθενται και οτι αλλο χρειαζεται. Μετα σβηνω τη φορμα.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ε ναι, ειπαμε, δεν ειναι μονο ο κωδικας, Ειναι και τα references και σε αλλες περιπτωσεις διαφορα settings που μπορει να εχεις στο project σου.

Για το OpenFileDialog και το DialogResult χρειαζεται και reference στο System.Windows.Forms και δε ξερω τι άλλο. Εγω αυτο που κανω πάντα ειναι να προσθετω απο το menu μια νεα φορμα στο προτζεκτ, οποτε αυτοματα προστιθενται και οτι αλλο χρειαζεται. Μετα σβηνω τη φορμα.

 

Οφειλω να σου δωσω συγχαρητηρια. Ηταν πολυ καλη η συνεργασια

και διαθετεις και πολυ καλες ικανοτητες στον προγραμματισμο.

 

Ευχαριστω και παλι. ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Καλημερα και παλι ! :D

Κανενα καλο βιβλιο (free) ή tutorial για να δω λιγο τα loop

που έχουν σχεση με τις διαφανειες στο Powerpoint υπάρχει?

 

Δοκιμασα να χρησιμοποιησω το For i=1 to ActivePresentations.Slides.Count

αλλα μου ελεγε οτι δεν βρισκει το δημοσιο μέλος ActiverPresentations.

 

Θελω να βαλω και loop μεσα στο προγραμμα να υποστηριζει περισσοτερες απο μια διαφανειες....

 

Ψαχνω στα τυφλα και ειναι λιγο αποτυχια..... :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ok, σκεψου το λογικα

 

Στην εφαρμογη σου ανοιγεις ενα presentation (το MyPresentation) το οποιο περιεχει ενα array απο slides τα οποια περιεχουν με τη σειρα τους διαφορα πραγματα (στη περιπτωση σου απο ενα table με 2 στηλες και καμποσες γραμμες)

Στην αρχη, πηρες το 1ο slide και εκανες πραγματα μαζι του (στη VB τα arrays ξεκινανε απο 1)

>
Dim MyFirstSlide = MyPresentation.Slides(1)

 

Το μονο λογικο που σου απομενει ειναι να παρεις και τα υπολοιπα slides με ενα for και να κανεις τα ιδια πραγματα

 

Πχ

>
For s = 1 To MyPresentation.Slides.Count
       MyFirstSlide = MyPresentation.Slides(s)
   
	 For i = 1 To MyFirstSlide.Shapes.Item(1).Table.Rows.Count
			    Dim row = MyFirstSlide.Shapes.Item(1).Table.Rows.Item(i)
			    'Get desired values from ppt table
			    Dim firstColVal = row.Cells(2).Shape.TextFrame.TextRange.Text.Trim()
			    Dim secondColVal = row.Cells(3).Shape.TextFrame.TextRange.Text.Trim()
			    'Build the sql update command for the db
			    Console.WriteLine("This is val of secondColVal " + secondColVal)
			    Console.WriteLine("This is val of firstColVal " + firstColVal)
			    sqlQueries.Add("UPDATE SHIPS SET PROBLEMS = '" & secondColVal & "' WHERE NAME='" & firstColVal & "'")
         Next
Next

 

Tip

επειδη υπαρχουν και slides που ειναι αδεια ή μπορει να μην εχουν αυτα που θελεις (πχ να εχουν μια εικονα αντι για πινακα) πρεπει να κανεις ελεγχο για τη ορθοτητα σου slide (οσο αυτο γινεται)

 

Παραδειγμα για να ελεγξεις αν το slide ειναι αδειο

 

>
For s = 1 To MyPresentation.Slides.Count
       MyFirstSlide = MyPresentation.Slides(s)
   

       If MyFirstSlide.Shapes.Count < 1 Then  ' <------- check if slide empty
           Continue For ' <------- if slide empty, skip
       If

	 For i = 1 To MyFirstSlide.Shapes.Item(1).Table.Rows.Count
                   '....... stuff here         
        Next
Next

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στην αρχη, πηρες το 1ο slide και εκανες πραγματα μαζι του (στη VB τα arrays ξεκινανε απο 1)

 

Οι πινακες στη VB ξεκινανε απο 0.

' example

Dim MyArray(10) As Integer

Στον παραπανω πινακα μπορεις να αποθηκευσεις 11 στοιχεια. Το πρωτο στοιχειο ειναι το MyArray(0) και το τελευταιο (11ο) MyArray(10).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Oooops, I stand corrected...

 

Την επαθα γιατι θεωρουσα πως το MyPresentation.Slides ειναι array. Αλλα το πρωτο slide στο αρχειο ειναι το MyPresentation.Slides(1), αν βαλεις 0 χτυπαει invalid range exception......

 

 

Πραγματικα, δε θα ξεκινουσα με τιποτα σοβαρο προτζεκτ στη VB (.νετ ή οχι), είναι πολυ χύμα σαν γλώσσα....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστω παιδια!!!!

 

Ειχα στο μυαλο μου κατι τέτοιο για loop ->

 

>

Dim var1 as Slide , var2 As Long , var3 As Long

For each var1 In ActivePresentationSlides

For var2= Slides.Shapes.Count To 1 Step -1

.......................
statements

.........................

Next

Next

 

Αλλα ηταν πιο απλο ......

 

Τωρα σχετικα με τα arrays και στην C ξεκινάνε απο 0 αλλα φτάνουν μεχρι το (συνολικο μήκος) - 1

απο εκει και πανω εχεις overflow και UB .

 

πχ

 

>

int my_array[5] , i = 0;

for( ; i<5; i++)
my_array[i] = i ;

 

my_array[0] = 0

my_array[1]= 1

my_array[2] = 2

my_array[3]= 3

my_array[4] = 4

 

και ως εδω το my_array[5] αν παει να προσπελαστει θα περιμενεις το απροσμενο που λενε . :P

 

P.S Μ αρεσε και η VB αλλα πιο πολυ μ αρεσει η C εννοειται :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...