PRB: Excel giá trị trở lại ghế thủ NULL sử dụng DAO OpenRecordset

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:194124
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TRIỆU CHỨNG
Khi kết nối với một bảng tính Excel sử dụng phương pháp đào OpenRecordset,một số giá trị trong một cột Excel có thể được trả lại khi Null khi các lớp dướigiá trị không phải là một Null. Điều này thường xảy ra khi số và văn bản datatypesđang intermixed trong cùng một cột Excel.
NGUYÊN NHÂN
Vấn đề này gây ra bởi một hạn chế của trình điều khiển Excel ISAM trong đómột khi nó sẽ xác định datatype một cột Excel, nó sẽ trở lại một NullĐối với bất kỳ giá trị không phải là của datatype ISAM trình điều khiển đã cài đặt sẵn đểcho rằng cột Excel. Xác định trình điều khiển Excel ISAM datatype của mộtExcel cột bằng cách kiểm tra thực tế giá trị trong lần đầu tiên vài hàng và sau đóchọn một datatype đại diện cho đa số các giá trị trong của nóLấy mẫu.
GIẢI PHÁP
Có hai cách giải quyết cho hành vi này:
  1. Bảo đảm rằng các dữ liệu trong Excel được nhập như văn bản. Chỉ định dạng các Excel cột để văn bản sẽ không thực hiện việc này. Bạn phải nhập lại các hiện có giá trị sau khi định dạng cột Excel. Trong Excel, bạn có thể sử dụng phím F5 để nhập lại hiện có giá trị trong các tế bào được chọn.
  2. Bạn có thể thêm tùy chọn IMEX = 1; để Excel kết nối chuỗi trong các OpenDatabase phương pháp. Ví dụ:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _            False, True, "Excel 8.0; HDR=NO; IMEX=1;")						
    Lưu Ý: Cài đặt IMEX = 1 cho biết trình điều khiển để sử dụng chế độ nhập khẩu. Tieåu bang naøy, cơ quan đăng ký thiết lập ImportMixedTypes = văn bản sẽ được nhận thấy. Lực lượng này hỗn hợp dữ liệu để được chuyển đổi thành văn bản. Này sẽ làm việc tin cậy, bạn có thể cũng có thể sửa đổi các thiết lập registry, TypeGuessRows = 8. ISAM trình điều khiển mặc định có vẻ lúc đầu tiên tám hàng và từ đó lấy mẫu xác định datatype. Nếu này tám hàng lấy mẫu là tất cả các số, sau đó thiết lập IMEX = 1 sẽ không chuyển đổi mặc định datatype văn bản; nó sẽ vẫn còn số.

    Bạn phải cẩn thận rằng IMEX = 1 không được sử dụng bừa bãi. Điều này là Chế độ nhập khẩu, do đó, các kết quả có thể là không thể đoán trước nếu bạn cố gắng làm thêm hoặc cập nhật dữ liệu trong chế độ này.

    Các thiết lập thể của IMEX là:
            0 is Export mode        1 is Import mode        2 is Linked mode (full update capabilities)						
    Khóa registry nơi các cài đặt mô tả ở trên được đặt là:

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

    Xem tài liệu tham khảo phần của bài viết này cho thông tin khi các Bảng tính Excel có văn bản tiêu đề cột với dữ liệu số.
TÌNH TRẠNG
Hành vi này là do thiết kế.
THÔNG TIN THÊM

Các bước để tạo lại hành vi

Để lặp lại vấn đề này, lần đầu tiên tạo ra một bảng tính Excel với một mặc địnhSheet1 bảng tính. Ở cột đầu tiên của Sheet1, nhập vào đâycác giá trị - 123, aaa, 456, bbb, 789. Lưu này Workbook trong C:\Temp của bạnthư mục, và đặt tên là Book1.XLS.

Trong Visual Basic, tạo ra một dự án mới của tiêu chuẩn EXE và làm theo các bước sau:
  1. Thực hiện một tham chiếu đến Microsoft DAO 3.5 đối tượng thư viện. Trong Visual Basic 6.0, đây sẽ là Microsoft DAO 3.51 đối tượng thư viện.
  2. Thêm một CommandButton vào các hình thức mới.
  3. Đặt đoạn mã sau trong các hình thức khai báo chung phần:
          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						
    Chạy các dự án bằng cách bấm phím F5 và lưu ý rằng trong cửa sổ Debug các giá trị văn bản được in như Null. Nếu phần lớn các giá trị trong bảng tính Excel là văn bản, sau đó kết quả từ mã ở trên sẽ được đảo ngược. Có nghĩa là, các giá trị số sẽ trở lại như Nulls.
THAM KHẢO
Để biết thêm chi tiết, xin vui lòng xem các bài viết sau đây trong cácCơ sở kiến thức Microsoft:

190195: HOWTO: giải nén thông tin từ Excel tờ với DAO
kbDSupport kbdse bảng tính bảng tính kbDAO350 kbDAO300 kbDAO250 kbIISAM kbExceL kbVBp400 kbVBp500 kbVBp600 kbVBp kbRegistry

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 194124 - Xem lại Lần cuối: 12/05/2015 09:27:54 - Bản sửa đổi: 2.0

Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 4.0 Enterprise Edition, Microsoft Visual Basic 5.0 Enterprise Edition

  • kbnosurvey kbarchive kbprb kbmt KB194124 KbMtvi
Phản hồi