2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

googleフォームからマークダウン記法に変換する

Posted at

何をしたか

Google Apps Script(GAS)を用いたgoogleフォームからマークダウン記法のドキュメントを生成する

参考にしたサイト

Spreadsheet Service → GASを用いてスプレッドシートを制御するため
Document Service → GASを用いてドキュメントを作成するため

機能別説明

スプレッドシートUI

onOpen()でツールなどの欄に"markdownの生成"という名前で追加される
showSidebar()は"markdownの生成"を押した際に表示される"生成"を押すと表示される内容

UI.gs
function onOpen() {
  var ui = SpreadsheetApp.getUi();           // Uiクラスを取得する
  var menu = ui.createMenu('markdownの生成');  // Uiクラスからメニューを作成する
  menu.addItem('生成', 'showSidebar');  // メニューにアイテムを追加する
  menu.addToUi();                            // メニューをUiクラスに追加する
}
function showSidebar() {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('index');
  SpreadsheetApp.getUi().showSidebar(htmlOutput);
}

生成を押した際に表示される内容

buttonをonclickするとGAS側で設定したcodingという関数が呼び出される。

index.html
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
    <base target="_top">
  </head>
  <body>
    <script>
      function get_user(){
        var user = document.getElementById("target").value;
        return user;
      }
    </script>
    <label>出力したい列の行数</label><br>
    <input type="text"name="target" id="target" placeholder="(例)3">
    <button onclick="google.script.run.coding(get_user())">送信</button>
  </body>
</html>

coding関数でmake_markdownを呼び出し、returnで返しているのはinsert_dataで作ったドキュメントのURLを返している。
それをalertすることで、URLが画面に表示される。

make_markdown.gs
function insert_data(text,info){
  var myFolder = DriveApp.getFolderById("FolderID");
  var document = DocumentApp.create(info);
  document.getBody().setText(text);
//  docファイルの移動
  var docFile = DriveApp.getFileById(document.getId());
  myFolder.addFile(docFile);
  // Rootの所属を外す
  DriveApp.getRootFolder().removeFile(docFile);
  return(docFile.getUrl());
}

function make_markdown(target){
  var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/Spreadsheet_ID");
  var s = sheet.getSheetByName("Sheet_name");
  var info = s.getRange(target,5).getValue()+":"+s.getRange(target,6).getValue();
  var text = "# 自己紹介\n";
  text = text+"名前:"+s.getRange(target,2).getValue()+"\n";
 
  if(!s.getRange(target,9).isBlank()){ // googleフォームの空白判定
     // 処理1
  }
  if(!s.getRange(target, 28).isBlank()){
     // 処理2
  }
  if(!s.getRange(target,11).isBlank()){
    // 処理3
  }
  if(!s.getRange(target,16).isBlank()){
    // 処理4
  }
  var doc = insert_data(text,info);
  return doc;
}
function coding(data){
 var ui = SpreadsheetApp.getUi();
 var url = make_markdown(Number(data));
 ui.alert(url); 
}

※ 注意点

  • documentを作る際にはフォルダは指定できないため最上位の配下にファイルが作成される
  • ファイルを移動するだけだと、初期の位置と共有される形になるので、rootを外す

完成物

他の人も使用する可能性があったため、UIを設計。
Screen Shot 2019-09-01 at 10.12.19.png

実行完了すると、ドキュメントのURLが表示され
kako-liAPc3R3VOpGTioa.png

ドキュメントに移行すると、マークダウンが生成されています!!
kako-n38Q5fXFdVMLGaeZ.png

何に役立つのか

ZENPEN~全国編入生会~というサイトを運営しており、その中の一つのコンテンツで編入体験談(Link)が存在する。
投稿方法としてgoogleフォームを採用していて、そこからwordpressの記事にスムーズ投稿が可能になった。
一般的なことにしようできたりするのだろうかと少し疑問は残る。

今後の課題

  • ワードプレスのプラグインとしてボタンワンクリックで記事投稿までする。

最後に

GASやプログラミングを用いて自動化・効率化をしたい,依頼したい方はご連絡(Twitter)をください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?