تحليل ملف Excel في C #، يبدو أن الخلايا يتم قطعها عند 255 حرفا ... كيف أتوقف عن ذلك؟

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

سؤال

أنا محور من خلال ملفات Excel التي تم تحميلها (XLSX) في ASP.NET مع C #. أنا أستخدم التعليمات البرمجية التالية (المبسطة):

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };

هذا يعمل تماما، لكن إذا كان هناك أي شيء أطول من 255 حرفا في الخلية، فسيتم قطعه. أي فكرة عما أفعله خطأ؟ شكرا لك.

تحرير: عند عرض ورقة Excel، فإنها تظهر أكثر من 255 حرفا، لذلك لا أصدق أن ورقة نفسها محدودة.

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

المحلول

فقط من Googling سريع للموضوع، يبدو أن هذا هو الحد من Excel.

تعديل: الحل الممكن (لسوء الحظ في VB)

نصائح أخرى

الحل!

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

يجب عليك تحديث مفتاح التسجيل هذا قبل تحليل جدول بيانات Excel:

// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\

// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\

// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\

يتغيرون TypeGuessRows ل 0 و ImportMixedTypes ل Text تحت هذا المفتاح. ستحتاج أيضا إلى تحديث سلسلة الاتصال الخاصة بك لتشمل IMEX=1 في الخصائص الموسعة:

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");

مراجع

http://blogs.vertigo.com/personal/aanttila/blog/archive/2008/03/28/Excel-and-CSV-Reference.aspx.

http://msdn.microsoft.com/en-us/library/ms141683.aspx.

... قد يتم اقتطاع الأحرف. لاستيراد البيانات من عمود مذكرة دون اقتطاع، يجب عليك التأكد من أن عمود المذكرة في واحدة على الأقل من صفوف العينات يحتوي على قيمة أطول من 255 حرفا، أو يجب عليك زيادة عدد الصفوف التي عينتها برنامج التشغيل لتضمين مثل هذا صف. يمكنك زيادة عدد الصفوف التي تم أخذ عينات منها زيادة قيمة Typeguessarows ضمن مفتاح HKEY_LOCAL_MACHINE SOFTWARE Microsoft JET 4.0 Kngines Excel Negel Key ....

لقد صادفت هذا، وكان الحل الذي عمل بالنسبة لي هو نقل الخلايا إلى نص طويل لأعلى جدول البيانات.

لقد وجدت هذا التعليق في منتدى يصف المشكلة

هذه مشكلة مع مزود جيت OLEDB. يبدو في الأول 8 صفوف
من جدول البيانات لتحديد نوع البيانات في كل عمود. إذا كان العمود يفعل
لا تحتوي على قيمة حقل أكثر من 256 حرفا في الأول 8 صفوف, ، ثم يفترض
نوع البيانات هو النص، الذي يحتوي على حد حرف 256. مقالة KB التالية لديها
مزيد من المعلومات حول هذه المشكلة: http://support.microsoft.com/kb/281517.

آمل أن يساعد هذا شخص آخر!

هل حاولت تعيين نموذج بيانات الأعمدة إلى النص داخل جدول البيانات؟ أعتقد أن القيام بذلك سيسمح للخلايا بالحصول على أكثر من 255 حرفا.

عدل] لما يستحق هذا الحوار مع فريق MS-Excel هو قراءة مثيرة للاهتمام. في قسم التعليقات في الأسفل، يحصلون على بعض المناقشات حول هذا 255 قطع. يقولون إن اكسل 12 يمكن أن يدعم أحرف 32 كيلو في كل خلية.

إذا كان هذا صحيحا، يجب أن يكون هناك طريقة للحصول على هذه البيانات. هنا شيئان يجب مراعاتهما.

  1. في الماضي، استخدمت خيار "IMEX = 1" في سلسلة الاتصال الخاصة بي للتعامل مع الأعمدة التي تحتوي على بيانات مختلطة تظهر فارغة. انها longshot، ولكن قد تعطي هذه المحاولة.

  2. هل يمكن لتصدير الملف إلى ملف مسطح محدد؟ IMHO هذه هي الطريقة الأكثر موثوقية للتعامل مع بيانات Excel، لأن Excel لديها الكثير من gotchas.

streationshetegear ل .NET. يمكن قراءة وكتابة (وأكثر) من مصنفات XLS و XLSX وتدعم نفس القيود مثل Excel للنص - بمعنى آخر سوف تعمل فقط. هناك تقييم مجاني إذا كنت ترغب في تقديمها.

إخلاء المسئولية: أنا أملك

فيما يتعلق آخر مشاركة، أستخدم أيضا Spreadshetegear وابحث عن أنه يعاني أيضا من 255 حرفا لكل قيود خلية عند القراءة من تنسيق XLS (NOT XLSX) الأقدم.

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