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

Convert or Import YAML (or similar) to Google Spreadsheet (or CSV)

我正在尝试将 YAML 格式的内容转换为 Google 电子表格。关于如何完成我想做的事情,我愿意接受不同的想法...

项目

常见问题解答内容

我要求的可交付成果

一个 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 到 CSV 的转换器实现这一点,但我找不到任何似乎有效的方法。 (是的,我用谷歌搜索了。不,似乎没有显示任何工作。)

理想的解决方案

一种工具组合或类似的东西,可以让我编写一个小脚本,这样我就可以一步到位 Google Drive 电子表格。

好的解决方案

我不介意输出的是 csv 文件还是 html table 并且我不得不进行一些复制粘贴之类的操作。我也同意稍微不同的标记格式。

值得注意

问答均为英文内容,标点符号全部使用正常

尝试失败

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

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

最后,我尝试 运行ning 一个 sed 命令将我的冒号和换行符变成管道(或其他东西),这样我就可以使用 pandoc 生成 html table.这没有任何效果,我最终替换了所有“r”字符,这真的很愚蠢...

为什么不直接复制粘贴? (或者——手动输入电子表格)

我有很多事情要做。

如果我能拼凑出一个脚本或一堆工具,让我可以从单个终端命令转换和上传,那会让我更喜欢。

tl;dr

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

我已经使用一些 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 table 我可以 copy-and-paste 进入 Google 驱动器。 我也在通过 RubyPants 处理问题和答案,这给了我一些我喜欢的降价功能。

由于我的问题的具体情况,我将添加一些 html header 和样式信息以及一行以在浏览器中弹出打开的结果文档,以便我可以 copy-paste很快。

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

----更新---- 如果有人特别感兴趣,这是我的最终版本。 它与上面的功能相同,但添加了 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")