johanshoku
@johanshoku (彡 斉藤)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Spreadsheetの配列を崩さずにGmailに転記したい

解決したいこと

GASを使ってSpreadsheetの配列を崩さずにGmailに転記したいです。
2次元配列になっているシートをそのままGmailに転記したいのですが、
配列が崩れてしまいます。
解決方法を教えてください。

無題.jpg
無題.jpg

該当するソースコード

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //スプレットシートを取得
Logger.log(ss.getName());
var sheetName = ss.getSheetByName('名簿');//シートの取得
Logger.log(sheetName.getName());
var order = sheetName.getRange('B3:C43').getValues();

var myBodyP = "お疲れ様です。\n名簿です。\n\n表題の件、以下の通り手続きをお願いします。\n\n\n";

var myBody =  (myBodyP+order)
var to =("xxxx@xxxx.co.jp");
var subject = sheetName.getRange("名簿です").getValue();
GmailApp.sendEmail(to,subject,myBody)
}

試したことを書きたいのですが、自分でもよくわからずいろんなサイトからつまんで書き足してみたのですが、
最終的には
お疲れ様です。
名簿です。

表題の件、以下の通り手続きをお願いします。

の文章のみか、
その下に
Range という文字が出るようになってしまいました。

ご教授いただけますようお願いいたします。


0

2Answer

最終的にどういう結果になって欲しいのか質問からはよくわからないですが、
配列をそのまま文字列と結合しても欲しい見た目になってくれることはあまりないです。
まずは配列から欲しい形式の文字列に体裁を整えると良いと思います。

1Like

Comments

  1. @johanshoku

    Questioner

    コメントありがとうございます。
    B,C,D列の情報を & ではさんで 一つのセルにまとめてみました。
    あとはこれを3,4,5,6を順番に改行して記載できるように方法を考えます。

    ありがとうございました。

変な方向に進んでそうなので、質問内容からいろいろ推測で書きます。

spreadsheetとgasを用意するのが面倒なので、ドキュメントから推測するに、
sheetName.getRange('B3:C43').getValues();の部分は、

[["①", "佐藤", "和夫"], ["②", "加藤", "正雄"], ["","",""]]

のような形の配列を返すのでしょう。
そしておそらく最終的にメール本文に記載したいのは、↓のような文章になるのだと思われます。

表題の件、以下の通り手続きをお願いします。
①佐藤和夫
②加藤正雄
~~~以下略~~~

これをやるには、スプレッドシートのセルの構造を修正しなくても、以下のように配列操作でどうとでもなります。(これも色々と質問内容からやりたいことを推測で書いてますので細かい違いはご自身で修正願います。)

const order = [["", "佐藤", "和夫"], ["", "加藤", "正雄"], ["","",""]]
const oriderString = order
  .filter(item => item[0].length !== 0) // 範囲内で空白の行は配列から削除する
  .map(item => item[0]+item[1]+item[2]) // 1行分のデータを結合する
  .reduce((acc, current) => `${acc}${current}\n`, "") // 全部の行のデータを1つのstringに結合する
// orderStringは'①佐藤和夫\n②加藤正雄\n'になる

あとは、元のソースコードにある以下の部分のorderをorderStringに変更すれば(少なくとも)既存のコードよりは欲しい結果に近づいているはずです。

var myBody =  (myBodyP+order)
1Like

Comments

  1. @johanshoku

    Questioner

    ありがとうございます。
    >>最終的にメール本文に記載したいのは、↓のような文章になるのだと思われます。
    そのとおりでございます。

    これから頂いたコードを使って作ってみたいと思います。
    ここから先は自分でやってみたいと思います。
    ご教授いただきましてありがとうございます。



  2. @johanshoku

    Questioner

    追伸、
    おかげさまを持ちまして、作りたいものを完成させることができました。
    本当にありがとうございました。

Your answer might help someone💌