سؤال

أنا أستخدم فئة OLEDBCONNECTION لاسترداد البيانات من مصنف Excel 2000/2003:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                          "Data Source=" + filename + ";" +
                          "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");

الآن اتضح أن الخلايا في ورقة العمل مع طول أكبر من 255 حرفا يتم اقتطاعها. هل هذا قيد في موفر Microsoft.Jet.oledb-أو هل هناك شيء يمكنني القيام به حيال ذلك؟

أي واحد؟

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

المحلول

سيحاول موفر OLEDB ل Excel تحديد أنواع البيانات المستندة تلقائيا من أول 8 صفوف من البيانات، ويمكن تعيين هذا باستخدام HDR = نعم / لا توجد خاصية في سلسلة الاتصال. بالإضافة إلى ذلك، هناك أنواع متعددة يمكنها تطبيقها على أعمدة النص. يحمل نوع المذكرة أكثر من 255 حرفا، لذلك إذا لم يكن لدى أي من الصفوف الثمانية الأولى ذلك، فستحدد نوع البيانات بشكل غير صحيح.

طريقة تغيير هذا هي تغيير إعداد تسجيل يسمى Typeguessarows، كما هو موضح هنا: دعم مايكروسوفت

ملاحظة: النطاق الصالح للقيم الخاصة بمفتاح TypeguessRows هو 0 إلى 16. ومع ذلك، إذا كانت القيمة 0، فإن عدد الصفوف المصدر ممسوحة ضوئيا هو 16384. لذلك إذا كان لديك ملف كبير جدا تأكد من أن أكبر الصفوف هي أولا.

نصائح أخرى

جرب هذا OLEDBADAPTER Excel QA. أنا نشرت عبر فائض المكدس.

لقد سكبت خلية ورقة عمل (صفوف [0] [4]) W / 445 حرفا وعملت بشكل جيد ... أضف هذا إلى نهاية الرمز الخاص ب Oput

// DataSet:          
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];
Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4];

string rowZeroColumn3 = row0Col3.ToString();
string rowZeroColumn4 = row0Col4.ToString();

Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);           
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top