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

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

# 参考にしたサイト
[Spreadsheet Service](https://developers.google.com/apps-script/reference/spreadsheet/) → GASを用いてスプレッドシートを制御するため
[Document Service](https://developers.google.com/apps-script/reference/document/) → GASを用いてドキュメントを作成するため

# 機能別説明
### スプレッドシートUI
onOpen()でツールなどの欄に"markdownの生成"という名前で追加される
showSidebar()は"markdownの生成"を押した際に表示される"生成"を押すと表示される内容

```javascript: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という関数が呼び出される。

```html: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が画面に表示される。

```javascript: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を設計。
<img width="334" alt="Screen Shot 2019-09-01 at 10.12.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316468/49b50647-6b18-94a9-3859-41bdd147a888.png">

実行完了すると、ドキュメントのURLが表示され
![kako-liAPc3R3VOpGTioa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316468/2e4d6312-ebe3-f9da-9789-6a62a48c7c9d.png)

ドキュメントに移行すると、マークダウンが生成されています！！
![kako-n38Q5fXFdVMLGaeZ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316468/ab2305d1-007f-a237-6d18-dd94d5dcacaa.png)


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

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

# 最後に
GASやプログラミングを用いて自動化・効率化をしたい,依頼したい方はご連絡([Twitter](https://twitter.com/mozzz111010))をください。