Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

Îåêßíçóå áðü ôï ìÝëïò kallileo. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 17-07-2008, 00:18. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-07-2008, 16:03 43388

    Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

    Εχω καποια αρχεια Excel τα οποια περιεχουν καπου πινακες με τιμες.

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


    500 600 700
    500 198 201 204
    600 206 208 211
    700 213 215 219
    800 221 223 227
    900 229 232 234

    Ειναι της παραπανω μορφης μορφης.
    Το θεμα ειναι οτι στο ιδιο φυλλο του excel μπορει να εχει 2-3 πινακες σε διαφορα σημεια αλλα και γραφικα και αλλα.

    Μπορω να θεσω τα ορια κελιων τα οποια θα διαβασω ωστε να μην εχω οτι να'ναι δεδομενα? Ας που εχω δεδομενα απο το κελι Β12 εως 027.

    Πως θα πρεπει να το προσεγγισω με την C#?

    Ευχαριστω.
  •  10-07-2008, 20:42 43393 σε απάντηση της 43388

    Απ: Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

    φαντάζομαι θέλεις να πάρεις τα δεδομένα και να τα φέρεις σε ένα datagridview/gridview ανάλογα με την εφαρμογή που θέλεις να φτιάξεις.για να διαβάσεις Data από excel

    δες λίγο εδώ αυτά τα άρθρα

    http://www.c-sharpcorner.com/UploadFile/mgold/HowtoOepnandReadanExcelSpreadsheetinaListViewin.NET11282005034134AM/HowtoOepnandReadanExcelSpreadsheetinaListViewin.NET.aspx

     

    http://support.microsoft.com/kb/302096

    κάπου στον κώδικα γράφεις αφού θέσεις τα Object references κάτι σαν το παρακάτω όπου θέτεις το range των κελιών που θέλεις να διαβάσεις


                range = objSheet.get_Range("A1", "E5");

    ελπίζω να βοήθησα


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  10-07-2008, 22:03 43396 σε απάντηση της 43388

    Απ: Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

    Option Strict On
    Imports System
    Imports System.IO
    Imports Excel
    Public Class Form1
        Dim EXL As New Excel.Application()
        Dim axl As String = "C:\Axl.xls"
        Dim wb0 As Excel.Workbook
        Dim sh1 As Excel.Worksheet
        Public Sub ΔημιουργίαΑποθηκευτικούXls()
            If EXL Is Nothing Then
                MsgBox("Δεν είναι Εγκατεστημένο το Excel")
                Exit Sub
            End If
            If Not File.Exists(axl) Then
                ΔημιουργίαXls()
            Else
                ΑνοιγμαXls()
            End If
        End Sub
        Private Sub ΔημιουργίαXls()
            wb0 = EXL.Workbooks.Add()
            sh1 = CType(wb0.Worksheets(1), Worksheet)
            wb0.SaveAs(axl)
        End Sub
        Public Sub ΑνοιγμαXls()
            wb0 = EXL.Workbooks.Open(axl)
            sh1 = CType(wb0.Worksheets(1), Worksheet)
            For i As Integer = 0 To 15
                Console.WriteLine()
                For j As Integer = 0 To 14
                    Console.Write(CType(sh1.Cells(i + 12, j + 2), Range).Value)
                Next
            Next
        End Sub
        Public Sub ΚλείσιμοEXL()
            Dim wkb As Excel.Workbook
            For Each wkb In EXL.Workbooks
                wkb.Save()
            Next wkb
            sh1 = Nothing
            wb0 = Nothing
            EXL.Workbooks.Close()
            EXL.Quit()
        End Sub
    End Class

    Το παραπάνω μπορεί να σε ενδιαφέρει είναι σε vb αλλά δεν ξέρω καθόλου από C#.Μπορείς βέβαια να το μεταφέρεις σε C#.


  •  14-07-2008, 12:04 43444 σε απάντηση της 43396

    Απ: Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

    Ευχαριστω πολυ...
    Κατάλαβα ακριβως τι γίνεται.
  •  17-07-2008, 00:18 43508 σε απάντηση της 43444

    Απ: Διαβασμα συγκερκριμενων κελιων απο αρχειο Excel

    Ο παραπάνω τρόπος απαιτεί να υπάρχει το Excel στον υπολογιστή σου. Επίσης, η Dim EXL As New Excel.Application() ανοίγει το Excel αν και δεν φαίνεται. Στο τέλος θα πρέπει όχι μόνο να κάνεις EXL.Quit() αλλά και EXL.Dispose(), διαφορετικά δεν θα ελευθερωθεί το reference μέχρι να τρέξει o garbage collector. Το ίδιο ισχύει και για τις sh1 = Nothing, wb0 = Nothing. Είναι πολύ εύκολο να ξεχάσεις κάποιο reference με αποτέλεσμα να παραμεινει ανοικτό το Excel ακόμα και αν ολοκληρωθεί η εκτέλεση του κώδικα σου.

    Οι παραπάνω περιορισμοί κάνουν απαγορευτική τη χρήση του Excel API σε servers, είτε πρόκειται για web applications είτε για web services. Εναλλακτικά μπορείς να χρησιμοποιήσεις τον Jet OLE DB Provider για να διαβάσεις και να γράψεις τα περιεχόμενα ενός Excel sheet σα να είναι πίνακας σε βάση. Αυτό δεν απαιτεί την ύπαρξει του Excel στο μηχάνημα και φυσικά δεν δημιουργεί instances του Excel. Δες το Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory του David Hayden.
    Συνοπτικά, χρησιμοποιείς ένα connection string του τύπου string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book1.xls;Extended Properties=""Excel 8.0;HDR=YES;"""; για να ανοίξεις το Excel σαν πίνακα και statements όπως "SELECT ID,City,State FROM [Sheet1$]"; για να διαβάσεις τα περιεχόμενα του κάθε Sheet στο WorkBook.

    Άκόμα και αυτή η λύση έχει κάποια προβλήματα. Τα κελιά του Excel δεν έχουν συγκεκριμένο τύπο ενώ το ADO.NET περιμένει κάθε στήλη να έχει τύπο. Ο OLE DB Provider προσπαθεί να μαντέψει τί τύπου είναι κάθε στήλη διαβάζοντας τις πρώτες Χ γραμμές. Αν όλες οι γραμμές μέχρι τη Χ είχαν στο πεδίο C νούμερα και η X+1 έχει κείμενο, ο provider θα νομίσει ότι η στήλη C περιέχει αριθμούς και θα ρίξει exception όταν προσπαθήσει να διαβάσει τη γραμμή Χ+1.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems