将YAML(或类似)转换或导入Google电子表格(或CSV)

时间:2015-01-09 23:53:46

标签: csv yaml

我正在尝试将YAML格式的内容转换为Google电子表格。我对如何完成我想要做的事情有不同的想法......

PROJECT

常见问题解答内容

我需要提供

Google电子表格,一栏中有问题,下一栏中有答案。

我的问题

我需要以指定的格式提供内容。这是愚蠢的。我知道这很愚蠢,所以我们不要在这里讨论它。

我不打算将文字段落写入电子表格。我讨厌那个。

我更喜欢使用markdown(或类似)在纯文本编辑器中撰写文本。 (对于以前的可交付成果,我已经能够使用带有拼凑在一起的脚本的降价处理器来处理其他一些问题...)

这是我想写的格式(并且已经写过):

Is this a frequently asked question?:
  Yes. People frequently ask this question.

What about this one?:
  Not as much. People don't ask that question very frequently.

Et cetera?:
  And so forth.

我的想法是通过某种YAML-to-CSV转换器运行它,但我找不到任何似乎有用的东西。 (是的,我用Google搜索。不,没有任何显示似乎有用。)

理想解决方案

允许我编写一个小脚本的工具或诸如此类的组合,以便我可以一步到达Google Drive电子表格。

确定解决方案

我不介意输出是csv文件还是html表,我不得不做一些复制粘贴或其他东西。我也可以使用稍微不同的标记格式。

值得注意

问题和答案都是英文内容,并使用所有正常的标点符号。

非常成功

我尝试的第一件事是将它写成pandoc的pipe_tables格式的表,但我讨厌它。

我还在http://codebeautify.org/yaml-to-json-xml-csv尝试了yaml-to-csv转换器,但是如果yaml键有空格则会出错。

最后,我尝试运行一个sed命令将我的冒号和新行转换为管道(或其他东西),以便我可以使用pandoc生成一个html表。没有任何关于这个工作,我最终取代了所有“r”字符,这真是愚蠢......

为什么不只是复制和粘贴? (或者 - 填写并输入电子表格)

我有很多这样的事情要做。

如果我可以拼凑一个脚本或一堆工具来让我转换并从单个终端命令上传,这会让我变得更好。

TL;博士

我需要尽可能少地从纯文本键值对格式转换为Google电子表格的两列。

1 个答案:

答案 0 :(得分:1)

我用一些ruby脚本解决了我90%的问题。

require 'yaml'
require 'rubypants'

filename = ARGV[0]

yml = YAML.load_file("./#{filename}.yml")

open("#{filename}.html", 'w') do |f|
  f << "<table>"
  yml.each do |q, a|
    q = RubyPants.new(q).to_html
    a = RubyPants.new(a).to_html
    f << "<tr><td>#{q}</td><td>#{a}</td></tr>"
  end
  f << "</table>"
end

这至少为我提供了一个基本的html表格,我可以将其复制并粘贴到Google云端硬盘中。 我也通过RubyPants处理问题和答案,这给了我一些我喜欢的降价功能。

由于我的问题的具体细节,我将添加一些html标题和样式信息以及一行以在浏览器中弹出生成的文档,以便我可以快速复制粘贴。

我认为我很好,除非有人知道将结果表格纳入Google文档的简便方法。 (是的,我知道有一个API。如果我能弄清楚如何使用它。哎呀。

---- ---- UPDATE 如果有人特别感兴趣,这是我的最终版本。 它做了同样的事情,但添加了HTML文档的其余部分,一些样式(以便我保持我的首选显示模式 - 黑色背景),并在浏览器中打开文件(该部分可能只适用于mac ,这对我来说很好。)

require 'yaml'
require 'rubypants'

filename = ARGV[0]


yml = YAML.load_file("./#{filename}.yml")

open("#{filename}.html", 'w') do |f|
  f << "
    <!DOCTYPE html>
    <html>
    <head>
    <style>
    body {margin: 20px; font-family: Menlo, Consolas, Arial; color: white; background-color: #222222; }
    table {border-collapse: collapse;}
      table, td, th { border: 1px solid green; }
      td {vertical-align: top; min-width: 500px; padding: 20px; font-size: 24px; line-height: 32px;}
      .question { color: #dddddd;}
    .answer { color: #efefef;}
    h1 { color: #cccccc; }
    </style></head><body><h1> #{filename}.html </h1><table>"
  yml.each do |q, a|
    q = RubyPants.new(q).to_html
    a = RubyPants.new(a).to_html
    f << "<tr><td class='question'>#{q}</td><td class='answer'>#{a}</td></tr>"
  end
  f << "</table></body></html>"
end

system("open", "#{filename}.html")