DBNull في خلية غير فارغة عند قراءة ملف Excel من خلال OLEDB

StackOverflow https://stackoverflow.com/questions/3206915

  •  13-09-2020
  •  | 
  •  

سؤال

يمكنني استخدام OLEDB لقراءة ملف Excel.تتمتع أحد الأعمدة بتنسيق "مشترك" وتحتوي على سلاسل مع الحروف والقيم التي تتكون من أرقام فقط.يتم استرداد قيم السلسلة دون مشكلة، ولكن يتم استرجاع القيم العددية النقية كصديم.

كيفية حل؟

يمكنني استخدام سلسلة الاتصال التالية لفتح ملف Excel 2003 (xls):

giveacodicetagpre.

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

المحلول

لقد وجدت بعض الوثائق على موقع Microsoft الخاص ب Microsoft ينطبق على السيناريو الخاص بك.يوصون بتحويل جميع العدد إلى السلاسل.

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

كما هو مذكور سابقا، يجب أن تخمين ADO في نوع البيانات لكل عمود في ورقة عمل Excel الخاصة بك أو نطاقها.(لا يتأثر هذا بإعدادات تنسيق خلية Excel.) يمكن أن تنشأ مشكلة خطيرة إذا كان لديك قيم رقمية مختلطة مع قيم النص في نفس العمود.يقوم كل من Jet ومزود ODBC بإرجاع بيانات نوع الأغلبية، ولكن إرجاع القيم NULL (فارغة) لنوع بيانات الأقليات.إذا تم خلط النوعين بنفس القدر في العمود، فإن الموفر يختار رقمي عبر النص.

على سبيل المثال:

giveacodicetagpre.

نصائح أخرى

لدي نفس المشكلة ولكن مع قيم السلسلة.يتم إرجاع القيم الرقمية ولكن يتم إرجاع قيم السلسلة ك NULL.أريد تحميل القيم الرقمية كقيم سلسلة.يمكن أن يحتوي العمود على أرقام ورموز غير رقمية (مثال: 100344567 و PRD001X01).

يعتبر برنامج تشغيل Excel أن العمود ذو الرقم الرقمي لأن القيم الموجودة في أول 8 صفوف هي من النوع الرقمي.

حتى إذا حددت الخلايا كنص (خلية تنسيق) لا يعمل.

لإجبار السائق على "راجع" العمود كسلسلة، لقد وضعت ببساطة اقتباس أمام القيمة الرقمية ('100344567).هذا يحول القيمة الرقمية إلى سلسلة.

هذه القيمة 8 صفوف محددة في التسجيل HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ -> TypeguessRows= 8.

آمل أن يساعدها.

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