سؤال

أحاول قراءة ملف جدول بيانات 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.

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