0

好的,所以我一直在玩弄 Ruby,但对它还是很陌生。我当前的程序遇到了问题。我想要它做的是获取包含术语列表的 CSV 文件,然后获取 csv 文件并创建这些术语的数组。一旦我在数组中有这些术语,我想搜索 Excel 工作簿并找到该术语的所有出现......在所有工作表中。如果找到一个术语,它将被附加到一个 csv 文件中,其中包含找到它的工作表名称和单元格位置。我认为我有一个相当好的开始。

编辑:我不再收到任何错误。它只是简单地重新创建给定的文件。它似乎没有放入工作簿并进行比较?有任何想法吗?

编辑 2:使用打印语句,我的 if 字符串是等于条件有问题。

编辑 3:我将这个问题隔离到我的比较中。当我使用term变量时,它会获取术语 as["theterm"]然后尝试将其与始终为假的字符串进行比较...

我的代码如下:

require 'roo'

$termsarray = Array.new

puts "Please enter filepath of file of terms (C:/path/to/file.csv)"
#termspath = gets.chomp.to_s
termspath = "C:/Ruby/termslist.csv"

CSV.foreach( "#{termspath}") do |row|   
  $termsarray << row
end
puts "Added terms to array successfully"

puts "Please enter filepath of file to cross-reference (C:/path/to/file.xlsx)"
#filepath = gets.chomp.to_s
filepath = "C:/Ruby/file_to_crossreference.xlsx"
puts "Please enter filepath for output file (C:/path/to/file.csv)"
output = gets.chomp.to_s

w1 = Excelx.new ( "#{filepath}" )
CSV.open( "#{output}", "w") do |csv|   
$termsarray.each do |term|
csv << term
  w1.sheets.each do |sheet|
    w1.default_sheet = sheet
    if w1.first_row && w1.first_column
      eval(w1.to_s).each do |index, value|
        if term.to_s.chomp.eql? value.to_s.chomp
          csv << [sheet, convert_index(index.to_s), value]
        end
      end
    end
  end
end
print "File Indexed Successfully!"
end
4

1 回答 1

0

我修复并发现了我的问题。在创建术语列表时,我不小心创建了一个数组数组。代码在下面,但它可能不是最好的,特别是如果数据位于多列等中。

CSV.foreach( "#{termspath}") do |row|  
  #Will only take first item in first column of each row
  string = row[0.to_i].to_s
  $termsarray << string
end
于 2012-08-28T13:58:40.053 回答