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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

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

Q&A

2回答

1724閲覧

CSVデータのインポート方法

pancho

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Ruby

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

0グッド

0クリップ

投稿2021/02/28 04:51

編集2021/02/28 05:30

前提・実現したい

Rubyでプログラムを組めるようになってそろそろ一年になります。
TODOアプリや入力したデータでグラフを表示したしは出来る様になりました。

実現したい事
今までExcelで行っていた会社の予算作成をアプリで出来ないかと作成中です。

やろうとしている事
これまでの実績をCSVでインポートする事は出来たのですが
今後の実績データはアプリにログインした時に
指定した場所にあるCSVファイル(実績データ)を自動でインポートしてほしいと思っています。

発生している問題

色々と検索してみるのですが、CSVのインポート機能の実装の記事は有るのですが
起動時などに「指定場所(社内サーバやPCの指定フォルダー)に有るCSVファイルを読み込みに行く」ような記事を見付ける事が出来なかったので
その部分に対してはまだ実装していません。
そのような機能が実装できるのか、そして実装方法が記載されているページのURLなどを教えていただけると幸いです。

ソースコード

CSVインポートのコードです。

model/Cashflow

class Cashflow < ApplicationRecord def self.import(file) CSV.foreach(file.path, headers: :first_row, encoding: Encoding::CP932 ) do |row| cashflow = find_by(id: row["id"]) || new cashflow.attributes = row.to_hash.slice(*updatable_attributes) cashflow.save! end end def self.updatable_attributes ["id", "d1_id", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31", "d32", "d33", "d34", "d35", "d36", "d37", "d38", "d39", "d40", "d41", "d42", "d43", "d44", "d45", "d46", "d47", "d48", "d49", "d50", "d51", "d52", "d53", "d54", "d55", "d56", "d57", "d58", "d59", "d60", "d61", "d62", "d63", "d64", "d65", "d66", "d67", "d68", "d69", "d70", "d71", "d72", "d73", "d74", "d75", "d76", "d77", "d78", "d79", "d80", "d81", "d82", "d83", "d84", "d85", "d86", "d87", "d88", "d89", "d90", "d91", "d92", "d93", "d94", "d95", "d96", "d97", "d98", "d99", "d100", "d101", "d102", "d103", "d104", "d105", "d106", "d107", "d108", "d109", "d110", "d111", "d112", "d113", "d114", "d115", "d116", "d117", "d118", "d119", "d120", "d121", "d122", "d123", "d124", "d125", "d126", "d127", "d128", "d129", "d130", "d131", "d132", "d133", "d134", "d135", "d136", "d137", "d138", "d139", "d140", "d141", "d142", "d143", "d144", "d145", "d146", "d147", "d148", "d149", "d150", "d151", "d152", "d153", "d154", "d155", "d156", "d157", "d158", "d159", "d160", "d161", "d162", "d163", "d164", "d165", "d166", "d167", "d168", "d169", "d170", "d171", "d172", "d173", "d174", "d175", "d176", "d177", "d178", "d179", "d180", "d181", "d182", "d183", "d184", "d185", "d186", "d187", "d188", "d189", "d190", "d191", "d192", "d193", "d194", "d195", "d196", "d197", "d198", "d199", "d200", "d201", "d202", "d203", "d204", "d205", "d206", "d207", "d208", "d209", "d210", "d211", "d212", "d213", "d214", "d215", "d216", "d217", "d218", "d219", "d220", "d221", "d222", "d223", "d224", "d225", "d226", "d227", "d228", "d229", "d230", "d231", "d232", "d233", "d234", "d235", "d236", "d237", "d238", "d239", "d240", "d241", "d242", "d243", "d244", "d245", "d246", "d247", "d248", "d249", "d250", "d251", "d252", "d253", "d254", "d255", "d256", "d257", "d258", "d259", "d260", "d261", "d262", "d263", "d264", "d265", "d266", "d267", "d268", "d269", "d270", "d271", "d272", "d273", "d274", "d275", "d276", "d277", "d278", "d279", "d280", "d281", "d282", "d283", "d284", "d285", "d286"] end end

Controller/Cashflows

class CashflowsController < ApplicationController before_action :require_user_logged_in before_action :period_check def index @cashflows = Cashflow.all.order(id: :asc).page(params[:page]).per(50) end def import Cashflow.import(params[:file]) redirect_to root_url end end

view/Cashflow/index

<h1>キャッシュフロー読み込み</h1> <%= form_with url: import_cashflows_path, local: true do |form| %> <%= form.file_field :file %> <%= form.submit %> <% end %>

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

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

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

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

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

gouf

2021/02/28 05:02

実際に試してみた、上手くいかなかったコードは開示可能ですか?
pancho

2021/02/28 05:31

CSVインポートのコード追記しました。 自動で読み込みに行く為にはどのようなコードを書いていいのかが分からなかったので、その部分はまだ作ってはいません。
guest

回答2

0

これRailsだけで実装するのは結構大変そうです。curlなどで作ってデスクトップにアイコン作っておくのが楽かも。

Loginするとどっかの画面に遷移しますね?その遷移先を定義している所を探してください。その遷移先を「なんとか_path」とします。

で、その部分を 「かんとか_path」に修正して、
「かんとか_path」にて CSVをimportした後「なんとか_path」へ遷移させます

で、その「かんとか_path」でCSVをimportするのは
CSV import だけのviewを作ってください。
画面表示後 javascriptでsubmitさせてください
csv fileをどう指定するかですが、これはうまく行くかどうかわかりませんが

  1. file_field の初期値として入れておく
  2. submitする前に javascript で 入力する

あたりかなぁ。。。

投稿2021/02/28 23:41

winterboum

総合スコア23331

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

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

0

これまでの実績をCSVでインポートする事は出来たのですが

のコードを、アプリの起動時に実行するようにすればいいだけです。

そのうまくいかないというコードを提示してみてください

投稿2021/02/28 05:13

y_waiwai

総合スコア87774

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

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

pancho

2021/02/28 05:34

CSVインポートのコード追記しました。 自動で読み込みに行く為にはどのようなコードを書いていいのかが分からなかったので、その部分はまだ作ってはいません。 データの置き場所の指定やファイル名の指定などはどのように書いたらよいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問