سؤال

أنا أحاول استخراج جدول القيم من excel (2003) جدول البيانات باستخدام vb6, والنتيجة التي يجب أن يتم تخزينها في (adodb) مجموعة السجلات.الجدول يبدو مثل هذا:

    Name   Option.1  Option.2  Option.3  Option.4  Option.5  Option.6 
    -----------------------------------------------------------------
    Name1         2         3         4
    Name2         2         3         4
    Name3         2         3         4
    Name4         2         3         4
    Name5         2         3         4
    Name6         2         3         4
    Name7         2         3         4
    Name8         2         3         4
    Name9         2         3         4         5         6         7  

على ربط تنفيذ استعلام "SELECT * FROM [Sheet1$]"أو حتى عمود محددة،"SELECT [Option#6] FROM [Sheet1$]"(انظر الحاشية 1) وحلقات من خلال النتائج, أنا أعطيت Null قيم الصف Name9, Option.4 --> Option.6 بدلا من القيم الصحيحة 5 ، 6 ، 7.يبدو الاتصال إلى جدول البيانات باستخدام "أفضل تخمين" من اتخاذ قرار ما الصالحة حدود الجدول و يستغرق سوى عدد محدد من الصفوف في الاعتبار.

للاتصال جدول, لقد حاولت كل اتصال مقدمي Microsoft.Jet.OLEDB.4.0 و MSDASQL والحصول على نفس المشكلة.

وهنا إعدادات الاتصال يمكنني استخدام:

Set cn = New ADODB.Connection
With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
    - - - - OR - - - - 
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
                        "DBQ=" & filePath & ";MaxScanRows=0;"
    .CursorLocation = adUseClient
    .Open
End With  
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")

تحدث هذه المشكلة فقط عندما يكون هناك أكثر من 8 الصفوف (باستثناء أسماء الأعمدة) و لدي مجموعة MaxScanRow=0 عن MSDASQL اتصال, ولكن هذا قد تنتج نفس النتائج.

أبرز مراجع المشروع علي المدرجة هي:

  • MS كائنات بيانات ActiveX 2.8 المكتبة
  • MS مجموعة سجلات كائنات بيانات ActiveX 2.8 المكتبة
  • MS Excel 11.0 مكتبة كائنات
  • MS ربط البيانات جمع VB 6.0 (SP4)

أي مساعدة في هذا الموضوع سيتم تقدير!

(1) لسبب ما ، بما في ذلك النقطة العشرية في العمود اسم هو تفسير #.


شكرا للجميع!في منتصف الطريق من خلال محاولة إعداد Schema.ini "برمجيا" من KB155512 onedaywhenالصورة ممتازة بعد أشار لي نحو الحل:

.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

وأود أن أشجع أي شخص مع مشاكل مماثلة إلى قراءة آخر التعليقات, لأن هناك اختلافات طفيفة إلى حل من شخص إلى آخر.

هل كانت مفيدة؟

المحلول

أنت الصحيح:هو التخمين نوع البيانات استنادا إلى عدد من الصفوف.وهناك المحلية آلة مفاتيح التسجيل كنت قد تكون قادرة على تغيير للتأثير على نوع البيانات الذي تم اختياره.للحصول على مزيد من التفاصيل ، انظر هذا الجواب.

نصائح أخرى

Excel تشغيل ISAM افتراضيا تبدو في أول حفنة من الصفوف و التخمينات بهم نوع البيانات.يجب أن يكون هناك (في وقت لاحق في الجدول) البيانات التي لا تنسجم مع الافتراض الأولي ، يستهجن وتحويله إلى NULL.

الخاص بك MaxScanRows=0 الإعداد هو مفتاح هذه المشكلة.يبدو أن تفعل الشيء الصحيح (مسح الطاولة كلها لنوع البيانات للاستخدام), ولكن في الحقيقة لا.

انظر onedaywhen's الإجابة لمزيد من التفاصيل ، أول معلومات عن KB282263 لم يكن المشورة الصحيحة.

أفضل نصيحة أستطيع أن أعطي لكم هو أن يتوقف عن فعل ذلك في VB6 البيئة.فتح Excel اضغط ALT+F11 و تحميل VBA IDE.وضع الكود الخاص بك في هناك.من ضمن هذه البيئة يمكنك الوصول الكامل Excel نموذج كائن.

لقد رأيت العديد من الناس يحاولون التفاعل مع التفوق في العديد من الطرق المختلفة و لديهم كل المشاكل.إما باستخدام ماكرو VBA ، أو إضافة في الأسلوب هو أفضل طريقة وجدت من الحصول على البيانات.كيف مايكروسوفت على Excel و مشروع تكامل مع TFS.

في بعض الأحيان تحتاج إلى إعادة التفكير في عملية قليلا عن هذا النهج أن تكون مناسبة.E. g.قد تحتاج إلى الحصول على المستخدم الذي يستخدم جدول تشغيل ماكرو من شأنها أن تدفع البيانات من جدول البيانات بدلا من تشغيل عملية سحب البيانات من جدول البيانات ولكن عادة ما يتم قابلة للتنفيذ تماما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top