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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

7040閲覧

エクセルシートからJSON生成

KoTT

総合スコア19

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/01/08 08:12

編集2020/01/10 07:56

エクセルの複数シート(DBの元となるシート)からJSONデータを生成する方法を探しています。
「JSONの構造・配列は変更されない/配列の要素は増えても良い」が条件です。

生成したJSONデータは、JSで取り込み表します。

JSONの構造・配列を変更したくない理由は、シートの列数・親子関係が変わるたびに
JSONを取り込むJS側をメンテナンスしたくないからです

良い方法をご存じの方はご教授ねがえませんでしょうか

■最終的に完成させる表
最終的に完成させる表

■JSONの元になるシート
エクセルのシート1(表1の列3に連動)

Lhankor_Mhy 様
記述頂いたコードについてご教示願います。

{ "ストローク", each _[ストローク ], type table } }), グループ化された行1 = Table.Group(グループ化された行, { "モデル" },

 [ストローク] を 追記するとこで tableからListに変化するようですが、
記述ルールわからず困っています。なにか参考になるサイトがあれば教えて下さい。

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

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

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

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

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

Lhankor_Mhy

2020/01/08 08:23 編集

つまり、こういうようなものですか? {"ブック名":[ {"シート名":[ {"A1":"value"}, {"A2":"value"}, {"A3":"value"}, //... ], //... } ]}
KoTT

2020/01/08 08:28

https://qiita.com/KIASMA/items/6a41326fdc444100fc1c のようなことがしたいのですが、リレーショナルデータベース的に複数のエクセルシートを読み込んで1つのJSONにしたいのです。が、全く方法がわかりません。
Lhankor_Mhy

2020/01/08 08:50

ということは、エクセルの表の構造は変わらない、という前提でいいのでしょうか?
papinianus

2020/01/08 09:03

その参考サイトの手順で何ができないのですか?
KoTT

2020/01/08 09:27

お世話になります。補足画像を追加いたしました。 参考サイトの手順では、複数のエクセルシートのデータをひとつのJSONデータに再編集する機能がありません。
Lhankor_Mhy

2020/01/09 00:23

質問の変更拝読。 「エクセルのシート1」が複数ありますが、これはブックがいくつかあるということでしょうか?
KoTT

2020/01/09 01:02

1つのブックの中に「シート(sheet)」が複数あります。
Lhankor_Mhy

2020/01/09 01:13 編集

ということは、実際には、「エクセルのシート1」「エクセルのシート2」「エクセルのシート3」...である、ということですね? ところで、「表1の列3に連動」とのことですが、この「列3」とは、「ストローク」のことであると考えていいですか? また、3つ目のシート以外は不要のように思えるのですが、1つ目と2つ目の役割というか、意味というか、それらが存在しないと発生する問題をお示しいただけますか?
KoTT

2020/01/09 01:22

承知しました。3つのシートを使って以下のような関係性をつくりたいと考えています。 sheet1のA列から(値)を選択する/選択された値=xとする sheet2のA列が値(x)の行を抽出 sheet2のB列から(値)を選択する/選択された値=yとする sheet3のA列が値(x)でsheet3のB列が値(y)の行を抽出 sheet3のC列から(値)を選択する/選択された値=zとする
Lhankor_Mhy

2020/01/09 01:25

もしかして、sheet3には「DDF」の情報しかなくて、「TMG」の情報は別シートになっている、とかそういうことですか?
KoTT

2020/01/09 01:37

画像を追記いたしました
Lhankor_Mhy

2020/01/09 02:05

ううむ、やはりSheet3だけを見ればいいように思えるのですが……
KoTT

2020/01/09 02:56

すいません。私がそもそもわかってなさすぎるせいで、説明がちゃんとできないのだと思います。 もう一度、考え直して、改めます。ありがとうございました。
Lhankor_Mhy

2020/01/09 04:28

一応、サンプルを挙げておきました。
guest

回答2

0

ベストアンサー

リレーショナルデータベース的に複数のエクセルシートを読み込んで1つのJSONにしたい

私なら、PowerQuery を使って結合し、JSONに変換すると思います。

参考:
ExcelでPowerQueryを使ってデータを結合して出力する - Qiita
テーブルをバイナリ(JSON)化したり、テーブルに戻したり - Qiita

追記

質問を閉じたられたようですが、作ってみたのでせっかくですから挙げておきます。

M

1let 2 path = Excel.CurrentWorkbook(){[Name="path"]}[Content][path]{0}, 3 ソース = Excel.Workbook(File.Contents(path), null, true), 4 Sheet1_Sheet = ソース{[Item="Sheet3",Kind="Sheet"]}[Data], 5 昇格されたヘッダー数 = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]), 6 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"モデル", type text}, {"サイズ", Int64.Type}, {"ストローク", Int64.Type}}), 7 グループ化された行 = Table.Group(変更された型, {"モデル", "サイズ"}, {{"ストローク", each _[ストローク], type table}}), 8 グループ化された行1 = Table.Group(グループ化された行, {"モデル"}, {{"サイズ", each Record.FromList( [ストローク], List.Transform([サイズ], each Number.ToText(_)) ), type table}}), 9 ピボットされた列 = Table.Pivot(グループ化された行1, List.Distinct(グループ化された行1[モデル]), "モデル", "サイズ"), 10 カスタム1 = Json.FromValue(ピボットされた列), 11 インポートされたテキスト = Table.FromColumns({Lines.FromBinary(カスタム1,null,null,932)}) 12in 13 インポートされたテキスト

サンプルを置いておきます。
https://yahoo.jp/box/Yya1D6

↓作成されたJSONはこちら。

JSON

1[{"DDF":{"10":[100,110,120,130,150],"20":[100,110,120,130,150],"30":[100,110,120,130,150],"40":[100,110,120,130,150],"50":[100,110,120,130,150]},"TMG":{"10":[100,110,120,130,150],"20":[100,110,120,130,150],"30":[100,110,120,130,150],"40":[100,110,120,130,150],"50":[100,110,120,130,150]},"AMB":{"10":[100,110,120,130,150],"20":[100,110,120,130,150],"30":[100,110,120,130,150],"40":[100,110,120,130,150],"50":[100,110,120,130,150]}}]

追記

少しコードを修正しました。
M言語はよくわからないので、変なことをしてたらすみません。

M

1let 2 path = Excel.CurrentWorkbook(){[Name="path"]}[Content][path]{0}, 3 ソース = Excel.Workbook(File.Contents(path), null, true), 4 Sheet1_Sheet = ソース{[Item="Sheet3",Kind="Sheet"]}[Data], 5 昇格されたヘッダー数 = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]), 6 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"モデル", type text}, {"サイズ", type text}, {"ストローク", type text}}), 7 グループ化された行 = Table.Group(変更された型, {"モデル", "サイズ"}, {{"ストローク", each _[ストローク], type table}}), 8 グループ化された行1 = Table.Group(グループ化された行, {"モデル"}, {{"サイズ", each Record.FromList( [ストローク], [サイズ] ), type table}}), 9 ピボットされた列 = Record.FromList(グループ化された行1[サイズ], グループ化された行1[モデル]), 10 カスタム1 = Json.FromValue(ピボットされた列), 11 インポートされたテキスト = Table.FromColumns({Lines.FromBinary(カスタム1,null,null,932)}) 12in 13 インポートされたテキスト

投稿2020/01/08 08:56

編集2020/01/09 09:14
Lhankor_Mhy

総合スコア36113

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

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

KoTT

2020/01/09 11:43

ありがとうございます! ご教示いただいたコードを参考にパワークエリでコードを作成中です。目的にちかいものができつつあります。 1点教えてください。1つ目と2つ目 どちらのM言語も正常に動作しているのですが、どのような違いがあるのでしょうか?
Lhankor_Mhy

2020/01/10 00:18

主にコードの整理ですが、出力されるJSONが少し違います。 外側の配列をなくし、すべての要素を文字列で統一しました。 `[{"DDF":{"10":[100,`→`{"DDF":{"10":["100",`
guest

0

excel2json - npm
シート指定(シート名では無理かも)も出来そうですしこれでいいのでは?

1シート1テーブルと考えて、JOINは自力でやる必要がありますね。

投稿2020/01/08 13:53

oikashinoa

総合スコア2826

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

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

KoTT

2020/01/08 23:53

やはりそうですか、、、各シートの親子関係を読み取って1つのJSONとして吐き出させたかったんですが、むずかしいですよね、、
oikashinoa

2020/01/09 00:03

Lhankor_Mhyさんが書かれているPowerqueryも確認して下さい。 joinした結果を別のシートに作成して、そのシートだけをjsonに出来るなら要望満たせそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問