質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Q&A

解決済

1回答

409閲覧

ruby スプレッドシートの情報をまとめたい

rice_shower

総合スコア8

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

0グッド

0クリップ

投稿2020/01/23 02:21

編集2020/01/23 02:22

環境
windows10
ruby2.5.3

使用しているrequire
require 'mail'
require "google_drive"

お世話になります。現在私はスプレッドシートから情報の抜出、メール等で送信するプログラムを組んでいます。

(1..sheet.num_rows).each do |row|及びifを使い縦に目的の情報を照会、該当するものがあれば取得してメール送信。

実行したい動き
同一社名の場合まとめて情報を送信したい。
縦に作業をしているのでメールを個別に送る際は問題ありませんが、会同一社名の場合も個別に送信をしてしまうのでまとめたい。

課題
縦に処理を行っているので、まとめるのが難しい。
next等で送信する処理を飛ばしても、新たな値が代入されるのでまとめることができない。

試したこと
1.sheet[row+1, 4]のように現在作業している行の一段下をチェック後同じ会社名の場合処理を追加。
この場合今後同一の会社の情報が増加したら対応できないので却下。

2.メール送信手前で代入しておいた前回の会社名と現在処理している会社名が違う場合送信。
送信はせずとも、内容が上書きされてしまうので結局最後に取得した情報しか送信されない。

現在作業中のコードを添付致します。

Ruby

1sheet = @session.spreadsheet_by_key(@key).worksheet_by_title("hoge") 2 (1..sheet.num_rows).each do |row| 3 @a = sheet[row, 4] 4 @aa = sheet[row + 1 , 4] 5 @b = sheet[row, 5] 6 @c = sheet[row, 6] 7 @g = sheet[row, 8] 8 @d = sheet[row, 19] 9 @e = sheet[row, 20] 10 @f = sheet[row, 27] 11 @h = sheet[row, 29] 12 13 if @d == "#{@day.month}月" 14 if @f == "hoge" 15 hoge 16 if @a == @aa 17 next 18 else 19 send_gmail 20 end 21 elsif @f == "hogehoge" 22 hogehoge 23 if @a == @aa 24 next 25 else 26 send_gmail 27 end 28 else 29 hogehogehoge 30 if @a == @aa 31 next 32 else 33 send_gmail 34 end 35 end 36 end 37 end 38end

本文、コード共にわかりづらくて申し訳ありません、ご助力頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

変数名が意味不明のものなので 同一社名 の判断をどこでするのかわからないです
ので仮に @a = sheet[row, 4] に有るものとします。

(1..sheet.num_rows).map do |row| @a = sheet[row, 4] : : [@a,[@a,@b,@c,d,@e,@f,@g,@h]] end.to_h

としますと
{ @a => [[,,,],[,,,,]]} という @a でグルーピングされたHashになりますから、それを利用して会社ごとに処理してください

投稿2020/01/23 02:57

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rice_shower

2020/01/23 03:11

感激です、助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問