在 Ruby 电子表格中用逗号替换点

Replacing dot with comma in Ruby spreadsheet

我正在尝试用逗号替换整个价格栏中的点。

这行不通。

#replace dots with commas in price column
@price_column = sheet.column(15)
@price_column.each do |c|
    c.to_s.gsub(".",",").to_f
end

我做错了什么?

您实际上是将浮点数转换为字符串并对字符串进行更改,然后再次尝试转换为浮点类型。 下面是例子

  1. initial_value => 2.1
  2. 将其转换为字符串 => "2.1"
  3. 正在改变。 , => "2,1"
  4. 然后将其更改为浮点值 => 2.0

所以点值后的值丢失,你又得到了2.0。 尝试避免使用 .to_f 来解决您的问题。

问题是您在具有无效浮点格式的字符串上使用 to_f。 ruby to_f 只取 , 和 returns 浮点数之前的数字。您不必担心将字符串转换为浮点数。

正确的代码是:

@price_column = sheet.column(15)
@price_column.each do |c|
   c.to_s.gsub!(/\./,",")
end

取决于您的 excel 设置 you have:

逗号可以是小数点的分隔符,也可以是我设置中的点,逗号是分隔符,点不是数字,所以它是一个字符串:

price dot               price comma     
2.4                       2,4       
2.5                       2,5       

sum price dot   #VALUE!         sum price comma 4,9

儿子在我的情况下,当我用 ruby 阅读它时:

require 'spreadsheet'

book = Spreadsheet.open './Workbook1.xls'

sheet1 = book.worksheet 0

column_A = sheet1.column(0)

puts "column A"

column_A.each do |cell|
  puts cell.class # this a string
  puts cell.gsub(".",",")
end

puts "Colum E"

column_E = sheet1.column(4)

column_E.each do |cell|
  puts cell.class #this is a float
  cells.to_s.gsub(".",",")
end

结果是:

irb(main):007:0> column A
String
String
String
NilClass
NilClass
Colum E
String
Float
Float
NilClass
NilClass
=> true

在这一步你有一个字符串,然后如果你 convert to float .t_f,excel 将显示你默认的浮点格式。在 ruby 中始终是点