PRB: Excel τιμές που επιστρέφονται ως τιμή NULL χρησιμοποιώντας DAO OpenRecordset

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 194124 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν συνδέεστε σε ένα υπολογιστικό φύλλο του Excel χρησιμοποιώντας τη μέθοδο DAO OpenRecordset, ορισμένες τιμές σε μια στήλη του Excel ενδέχεται να επιστραφούν ως Null κατά την υποκείμενη τιμή δεν είναι μια τιμή Null. Αυτό συμβαίνει συνήθως όταν αριθμητικών και τύπους δεδομένων κειμένου είναι intermixed εντός της ίδιας στήλης στο Excel.

Αιτία

Αυτό το ζήτημα προκαλείται από έναν περιορισμό του προγράμματος οδήγησης ISAM του Excel σε αυτήν από τη στιγμή που προσδιορίζει τον τύπο δεδομένων μιας στήλης του Excel, θα επιστρέψει defaulted έχει μια τιμή Null, για όλες τις τιμές που δεν είναι ο τύπος δεδομένων του προγράμματος οδήγησης ISAM για για αυτήν τη στήλη Excel. Το πρόγραμμα οδήγησης ISAM για το Excel προσδιορίζει τον τύπο δεδομένων μιας στήλης του Excel, εξετάζοντας τις πραγματικές τιμές στις πρώτες γραμμές και στη συνέχεια επιλέγει έναν τύπο δεδομένων που αντιπροσωπεύει την πλειοψηφία των τιμών των δειγμάτων.

Προτεινόμενη αντιμετώπιση

Υπάρχουν δύο λύσεις για αυτήν τη συμπεριφορά:
  1. Να εξασφαλίσει ότι τα δεδομένα στο Excel εισάγεται ως κείμενο. Αναδιαμόρφωση απλώς τη στήλη του Excel σε "κείμενο" θα δεν επιτύχετε. Θα πρέπει να εισαγάγετε ξανά τις υπάρχουσες τιμές μετά την αναδιαμόρφωση της στήλης του Excel. Στο Excel, μπορείτε να χρησιμοποιήσετε F5 για να εισαγάγετε εκ νέου υπάρχουσες τιμές στο επιλεγμένο κελί.
  2. Μπορείτε να προσθέσετε την επιλογή IMEX = 1; στο Excel τη συμβολοσειρά στη μέθοδο OpenDatabase σύνδεσης. Για παράδειγμα:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    ΣΗΜΕΙΩΣΗ: Ρύθμιση IMEX = 1 υποδεικνύει στο πρόγραμμα οδήγησης να χρησιμοποιήσετε τη λειτουργία εισαγωγής. Σε αυτήν την κατάσταση, τη ρύθμιση ImportMixedTypes μητρώου = κειμένου θα είναι παρατηρήσει. Αυτό αναγκάζει μεικτών δεδομένων θα μετατραπεί σε κείμενο. Για να λειτουργήσουν αξιόπιστα, ίσως χρειαστεί να τροποποιήσετε τη ρύθμιση μητρώου, TypeGuessRows = 8. Το ISAM προγράμματος οδήγησης από προεπιλογή εξετάζει τις οκτώ πρώτες γραμμές και από δειγματοληψία που προσδιορίζει τον τύπο δεδομένων. Εάν αυτό οκτώ γραμμή δειγματοληψίας είναι όλα τα αριθμητικά, τότε η ρύθμιση IMEX = 1 δεν θα μετατρέψει ο προεπιλεγμένος τύπος δεδομένων κείμενο, θα παραμείνει αριθμητικά.

    Πρέπει να είστε προσεκτικοί ότι IMEX = 1 δεν επιτρέπεται η χρήση indiscriminately. Αυτό είναι IMPORT λειτουργίας, έτσι ώστε τα αποτελέσματα μπορεί να είναι απρόβλεπτα, εάν προσπαθήσετε να κάνετε προσαρτά ή ενημερώνει δεδομένα σε αυτήν την κατάσταση λειτουργίας.

    Οι πιθανές ρυθμίσεις IMEX είναι:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    Το κλειδί μητρώου, όπου βρίσκονται οι ρυθμίσεις που περιγράφονται παραπάνω είναι:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Ανατρέξτε στην ενότητα "ΑΝΑΦΟΡΕΣ" αυτού του άρθρου για πληροφορίες σχετικά, όταν το υπολογιστικό φύλλο του Excel έχει κεφαλίδες στηλών κειμένου με αριθμητικά δεδομένα.

Κατάσταση

Αυτή η συμπεριφορά οφείλεται στη σχεδίαση.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή της συμπεριφοράς

Για να αναπαραγάγετε αυτό το ζήτημα, δημιουργήστε πρώτα ένα βιβλίο εργασίας του Excel με ένα υπολογιστικό φύλλο Φύλλο1 προεπιλογή. Στην πρώτη στήλη του Φύλλο1, πληκτρολογήστε τις ακόλουθες τιμές - 123, ααα, 456, bbb, 789. Αποθηκεύστε αυτό το βιβλίο εργασίας στον κατάλογο C:\Temp και ονομάστε τον Book1.XLS.

Στη Visual Basic, δημιουργήστε ένα νέο έργο Standard EXE και ακολουθήστε τα εξής βήματα:
  1. Κάνετε μια αναφορά στη βιβλιοθήκη αντικειμένων Microsoft DAO 3.5. Στη Visual Basic 6.0, αυτό θα τη βιβλιοθήκη αντικειμένων Microsoft DAO 3.51.
  2. Για να προσθέσετε ένα στοιχείο CommandButton στη νέα φόρμα.
  3. Τοποθετήστε τον παρακάτω κώδικα στην ενότητα γενικές δηλώσεις της φόρμας:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    Εκτέλεση του έργου, πιέζοντας το πλήκτρο F5 και Σημειώστε ότι στο παράθυρο εντοπισμός σφαλμάτων των τιμών κειμένου εκτυπώνονται ως μηδενικές. Εάν η πλειοψηφία των τιμών στο υπολογιστικό φύλλο του Excel στο κείμενο, τότε το αποτέλεσμα από τον παραπάνω κώδικα θα είναι αναστρέψιμη. Αυτό σημαίνει ότι οι αριθμητικές τιμές θα επιστρέψετε ως ενώ.

Αναφορές

Για πρόσθετες πληροφορίες, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):

190195: ΔΙΑΔΙΚΑΣΙΕΣ: εξαγωγή πληροφοριών από το φύλλο του Excel με DAO

Ιδιότητες

Αναγν. άρθρου: 194124 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Λέξεις-κλειδιά: 
kbprb kbmt KB194124 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:194124

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com