【问题标题】:Exporting CSV properly open Office (save numbers as TEXT)导出 CSV 正确打开 Office(将数字另存为 TEXT)
【发布时间】:2012-06-09 23:01:47
【问题描述】:

我正在使用 OPEN-OFFICE 工作并保存 CSV。我也在使用逗号分隔符和'"'。但是,在保存 CSV 时,所有数字都没有被封装。如何强制 Open-Office 将数字视为文本并将它们也封装起来。示例:

"store","website","attribute_set","type","sku","name","price","categories","description","qty","sizet","is_in_stock","status","visibility","tax_class_id"
"admin","base","test","simple","T010013-012","Test12","12","test/test","Desc12",12,"S","1","Enabled","Catalog, Search","Taxable Goods"
"admin","base","test","simple","T010013-013","Test13","13","test/test","Desc13",13,"M","1","Enabled","Catalog, Search","Taxable Goods"
"admin","base","test","simple","T010013-014","Test14","14","test/test","Desc14",14,"L","1","Enabled","Catalog, Search","Taxable Goods"
"admin","base","test","simple","T010013-015","Test15","15","test/test","Desc15",15,"XL","1","Enabled","Catalog, Search","Taxable Goods"
"admin","base","test","simple","T010013-016","Test16","16","test/test","Desc16",16,"XXL","1","Enabled","Catalog, Search","Taxable Goods"
"admin","base","test","configurable","T010013","TestParent","5","test/test","DescParent","30","","1","Enabled","Catalog, Search","Taxable Goods"

感谢您的帮助。 PS:我正在为 Magento 使用 MAGMI 脚本。上传产品

【问题讨论】:

  • 请注意,CSV 不需要引用任何不包含逗号或换行符的内容。您可以从示例中删除所有引号,它仍然是有效的 CSV。

标签: csv numbers delimiter openoffice-calc magmi


【解决方案1】:

这需要两个步骤:

  1. 将包含数字的单元格格式化为文本(因为整个列都需要该格式,只需将该格式应用于整个列,因此如果添加行,则无需格式化每个新单元格);

  2. 修改导出过滤器设置以引用所有文本单元格:

使用此设置,Calc 应保存此工作表:

如下:

"bar","42"
"foo","57"

顺便说一句,Calc 完全符合标准默认引用每个数字。至少,RFC 4180 不需要引用每个字段。

【讨论】:

  • 我正在做同样的事情。但是当我用记事本++打开它时,所有数字都没有被引用。
  • 嗯 - 你确定单元格被格式化为文本了吗?我假设“Quote all text cells”只影响格式正确的单元格。我使用最新的 LibreOffice 3.5.4.2 (Win 7) 对此进行了测试,所以我确信它可以工作。但我会再次使用 Linux 进行测试,也许你遇到了错误?
  • @user1023021:刚刚使用 Ubuntu Linux 进行了测试——在那里也非常适合我(同样,LibreOffice 3.5.4.2)。所以我确信该解决方案有效。
  • 如果我不更改单元格值,引号将保留,但如果我用数字填充新单元格并点击另存为 > 过滤器等...旧单元格被引用,新单元格不是.
  • @user1023021:所以您只是将单元格格式化为已经有值的文本?我认为格式化完整的列要容易得多。只需单击一次列标题(在我的示例中:B),即可选择整个列。然后,右键单击并选择format cells(或菜单Format -> Cells... 或直接按CTRL+1),然后为整个列设置文本格式。
【解决方案2】:

为此编写了一个小红宝石脚本,而不是尝试在 OpenOffice 或 Excel 中查找选项。还是找不到。

require 'csv'

rows = CSV.open(ARGV[0]).readlines
CSV.open("#{ARGV[0].split('.')[0]}_qgisfriendly.csv", "w", {:force_quotes => true}) do |csv|
  rows.each do |row|
    csv << row
  end
end

【讨论】:

    【解决方案3】:

    使用正确的 SQL 导入语法有一个稍微简单的方法可以避开这个问题。考虑以下几点:

    LOAD DATA LOCAL INFILE '/yourfile.csv' 
    INTO TABLE yourtable  
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"';
    

    OPTIONALLY ENCLOSED BY '"' 行应该解决数字行的问题,而不必花时间弄乱从 Open/LibreOffice 等辅助应用程序导出时 CSV 的格式。

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多