前提・実現したいこと
Reactでappを作成しており,backend(Python flask)にデータを送りたいと思っています。
以下の様な複数シートを含んだExcelデータを,React DropZoneを用いて読み込み,React内部でExcelをJsonに変換して,axiosでbackendにデータを送っております。
Sheet1:
A | B | C |
---|---|---|
小林 | 199 | 79 |
石川 | 150 | 30 |
Sheet2
A | B | C |
---|---|---|
上田 | 172 | 70 |
原田 | 168 | 65 |
Sheet3
A | B | C |
---|---|---|
松本 | 172 | 62 |
石川 | 187 | 75 |
最終的には,Python側で受け取りとり,DataFrameに変換したいと考えています。
発生している問題・エラーメッセージ
以下,Python側で受け取ったデータですが,DataFrameに変換しても意図した形で取得できていません。
file | |
---|---|
0 | [[[], [{'label': 'Sheet1', 'key': '[{"A":"小林","B":199,"C":79},{"A":"石川","B":150,"C":30}]'}]], [{'label': 'Sheet2', 'key': '[{"A":"上田","B":172,"C":70},{"A":"原田","B":168,"C":65}]'}]] |
1 | [{'label': 'Sheet3', 'key': '[{"A":"松本","B":172,"C":62},{"A":"石川","B":187,"C":75}]'}] |
該当のソースコード
js
1 const [impFile, setFile] = useState([]); 2 3 const xlsxFileToJson = (file) => { 4 var reader = new FileReader(); 5 console.log('-----Excel drop-----') 6 reader.onload = function(e) { 7 var data = e.target.result; 8 var workbook = XLSX.read(data, { 9 type: 'binary' 10 }); 11 workbook.SheetNames.forEach(function(sheetName) { 12 13 var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); 14 var json_object = JSON.stringify(XL_row_object); 15 16 const newDF = json_object; 17 const result = Object.keys(newDF[0]).map(x=>({label:sheetName, key:json_object})); 18 setFile((...impFile)=>[...impFile, result]); 19 }) 20 }; 21 22 ... 23 24 };
axios post箇所
js
1Axios.post('http://127.0.0.1:5000/excel', {file: impFile})
Python側では以下の様な形で受け取っています。
python
1 impFile = request.get_json() 2 tmpDF = pd.DataFrame(impFile)
試したこと
問題の原因としては,
①JaveScript側での配列への格納方法が適切でない。
②Python側での処理(要素抽出)が正しくない。
と思っているのですが,対応方法が分かりません。
ご教示頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/05 14:28