كيف أقرأ محتوى جدول بيانات Excel باستخدام روبي؟
-
27-09-2020 - |
سؤال
أحاول قراءة ملف جدول بيانات Excel باستخدام روبي، لكنه لا يقرأ محتوى الملف.
هذا هو السيناريو الخاص بي
book = Spreadsheet.open 'myexcel.xls';
sheet1 = book.worksheet 0
sheet1.each do |row|
puts row.inspect ;
puts row.format 2;
puts row[1];
exit;
end
ويعطيني ما يلي:
[DEPRECATED] By requiring 'parseexcel', 'parseexcel/parseexcel' and/or
'parseexcel/parser' you are loading a Compatibility layer which
provides a drop-in replacement for the ParseExcel library. This
code makes the reading of Spreadsheet documents less efficient and
will be removed in Spreadsheet version 1.0.0
#<Spreadsheet::Excel::Row:0xffffffdbc3e0d2 @worksheet=#<Spreadsheet::Excel::Worksheet:0xb79b8fe0> @outline_level=0 @idx=0 @hidden=false @height= @default_format= @formats= []>
#<Spreadsheet::Format:0xb79bc8ac>
nil
أحتاج إلى الحصول على المحتوى الفعلي للملف.ما الخطأ الذي افعله؟
المحلول
يبدو الأمر كذلك row
, ، الذي هو الفصل Spreadsheet::Excel::Row
هو برنامج Excel بشكل فعال Range
وأنه إما يتضمن سلوكيات لا تعد ولا تحصى أو على الأقل يكشف بعض السلوكيات التي لا تعد ولا تحصى، #each
, ، على سبيل المثال.
لذلك يمكنك إعادة كتابة البرنامج النصي الخاص بك بشيء من هذا القبيل:
require 'spreadsheet'
book = Spreadsheet.open('myexcel.xls')
sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
sheet1.each do |row|
break if row[0].nil? # if first cell empty
puts row.join(',') # looks like it calls "to_s" on each cell's Value
end
لاحظ أنني وضعت بين قوسين، وهو ما يُنصح به عمومًا هذه الأيام، وقمت بإزالة الفواصل المنقوطة، والتي ليست ضرورية إلا إذا كنت تكتب عدة عبارات على سطر (وهو ما نادرًا ما تفعله - إن حدث ذلك على الإطلاق).
من المحتمل أن يكون ذلك بقايا من برنامج نصي أكبر، لكنني سأشير إلى ذلك في الكود المعطى لـ book
و sheet1
ليست هناك حاجة للمتغيرات حقًا، وهذا Spreadsheet#open
يأخذ كتلة، لذا فإن إصدار روبي الأكثر اصطلاحًا قد يكون شيئًا مثل هذا:
require 'spreadsheet'
Spreadsheet.open('MyTestSheet.xls') do |book|
book.worksheet('Sheet1').each do |row|
break if row[0].nil?
puts row.join(',')
end
end
نصائح أخرى
لا أعتقد أنك بحاجة إلى طلب parseexcel، فقط require 'spreadsheet'
هل قرأت مرشد, ، فمن السهل جدًا متابعته.
هل هو ملف سطر واحد؟إذا كان الأمر كذلك تحتاج:
giveacodicetagpre.