1

我正在使用 ruby​​ 将 excel 文件转换为 csv 文件。这是我为此编写的函数:

#!/usr/bin/ruby
require 'CSV'
require 'roo'

def xls_to_csv(file,temp_filename)
    if file =~ /\.xlsx$/
        excel = Roo::Excelx.new(file)
    else
        excel = Roo::Excel.new(file)
    end 

    output = File.open(temp_filename, "w")

    1.upto(excel.last_row) do |line|
        output.write CSV.generate_line excel.row(line)
    end 
end

它工作正常,除了在文件中的任何邮政编码之后它会添加一个“.0”。以下是输入数据的示例:

address state   zip code    name
123 Lane    TX  78705           John Smith
456 Lane    MS  39564           Smohn Jith

一旦 .xls 文件通过函数运行,这里是 CSV 输出:

address,state,zip code,name
123 Lane,TX,78705.0,John Smith
456 Lane,MS,39564.0,Smohn Jith

如您所见,邮政编码现在后面有“.0”。有没有办法避免这种情况?谢谢!

4

1 回答 1

2

Roo 从 Excel 单元格类型中获取数据类型。如果您控制电子表格,我建议您将单元格类型更改为文本。否则,您可以将其转换为脚本中的字符串。例如(请注意,我没有在本地测试过,所以它可能是错误的):

1.upto(excel.last_row) do |line|
    data = excel.row(line)
    data[2] = data[2].to_s
    output.write CSV.generate_line data
end
于 2013-05-29T21:29:12.157 回答