以下是用于分割副本和JavaScript的JavaScript粘贴Excel数据。我的目的是将给定的Excel数据拆分到每个单元格中,并在HTML端重用它们。我的问题是我能用Javascript编写它,但我在Ruby中重写它时遇到了麻烦。我需要一些帮助。
这是我的JavaScript:
var data = $('textarea[name=excel_data]').val();
console.log(data);
var rows = data.split("\n");
var l = rows.length - 3;
console.log(l);
var table = $('<table class="table table-bordered" />');
var datas = new Array();
for(var y in rows) {
var cells = rows[y].split("\t");
var row = $('<tr />');
datas[y] = new Array();
for(var x in cells) {
row.append('<td id='+y+x+'>'+cells[x]+'</td>');
datas[y][x] = cells[x];
$('#excel_table_a'+l+'_'+y+x).html(datas[y][x]);
$('#excel_table_b'+l+'_'+y+x).html(datas[y][x]);
$('#excel_table_c'+l+'_'+y+x).html(datas[y][x]);
$('#excel_table_d'+l+'_'+y+x).html(datas[y][x]);
$('#excel_table_e'+l+'_'+y+x).html(datas[y][x]);
$('#excel_table_z'+l+'_'+y+x).html(datas[y][x]);
} //data generate
table.append(row);
}
这是我在Ruby中的尝试:
data = @bindo.bindo_input
rows = data.split("\n")
length = rows.length - 3
@datas = Array.new
cells = Array.new { }
rows.length.each do |y|
cells << rows[y].split("\t")
@datas[y] = Array.new
cells.length.each do |x|
@datas[y][x] = cells[x]
end
end
当我尝试在Rails上运行此代码时,我收到如下错误消息:
未定义的方法`每个&#39; 7:Fixnum
如果有任何帮助,我将非常感谢你。
答案 0 :(得分:0)
rows.length
会返回一个数字。
each
是在Range,Enumerable,Hash和Array上定义的方法(可能是其他方法,但不是整数)。
您尝试做的事情(迭代rows.length
次)可以通过以下任何方式完成:
# Enumerator#times
rows.length.times do |i|
# Enumerator#times + each
rows.length.times.each do |i|
# Range#each
0.upto(rows.length - 1).each do |i|
# another Range#each
(0..(rows.length - 1)).each do |i|
# Array#each
Array.new(rows.length).each do |i|
关于你的代码的另一个注意事项:你正在使用Array.new
来构建很好的数组,尽管你也可以简单地使用[]
。 cells = Array.new {}
中的括号没有做任何事情。可以将块传递给Array.new
构造函数,但您似乎并未将其用于正确的目的。见Ruby array creation, Array.new vs []
另外,做一点重构:
rows = @bindo.bindo_input.split("\n")
corrected_rows_length = rows.length - 3
@datas = []
cells = []
corrected_rows_length.times do |y|
cells << rows[y].split("\t")
@datas[y] = []
cells.length.times do |x|
@datas[y][x] = cells[x]
end
end