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

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

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

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1029閲覧

python openpyxlを使っています。データ処理し作成したリストを新規のエクセルに書き込みたい

SOSEKI

総合スコア5

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/11 00:02

編集2020/08/11 00:12

まず、このようなエクセルファイルが存在しています。
イメージ説明

このデータをある条件で処理してその各列の値をリストに格納しています。
[244, 44, 61, 14, 3, 32, 37, 8.....略..72]
このようなリストが4つできます。

これをエクセルに元のファイルのように書き込みたいのですが、できません。


書いているコードが以下になります。

import numpy as np import pandas as pd import openpyxl from openpyxl import Workbook wb = Workbook() wb = openpyxl.load_workbook("/Users/匿名/Desktop/matome/まとめ.xlsx") ws = wb.worksheets[0] excel = Workbook() new_ws = excel.active def get_between_zeros(arr, N, return_index=False): arr = np.r_[arr, np.zeros(N, dtype=int)] is_nonzero = arr != 0 s = is_nonzero.argmax() ln = np.convolve(is_nonzero[s:], np.ones(N, dtype=int), 'valid').argmin() if return_index: return arr[s:s+ln], (s, s+ln) else: return arr[s:s+ln] a=1 b=1 for j in ['A' , 'D']: data= [cell.value for cell in ws[j]] data.pop(0) a = np.array(data) j = [] for i in range(a.size): out, [s, e] = get_between_zeros(a, 3, True) j.append(out.sum()) new_ws.cell(a, b).value = j b += 1 a[:e] = 0 if a.sum() == 0: break wb.close()

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

と返されてしまいます。

リスト自体はうまく作られています。

new_ws.cell(a, b).value = jがうまくいきません。
この原因は何でしょうか?

小質問

for j in ['A' , 'D']:

この部分は本当は全ての列を選択したいです。全て入力してもいいのですが、最終的に35〜40列くらいあるのでなんとか楽をしたいです。

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

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

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

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

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

mako1972

2020/08/11 00:06

python openpyxlを使って等の文言を入れないとレスが付きにくい と思います(まぎらわしいので)。
can110

2020/08/11 00:15

NameError: name 'b' is not defined が発生します。 提示コードが正しいか確認ください。
SOSEKI

2020/08/11 00:16

書き直しました!
guest

回答1

0

ベストアンサー

やりたいことおよび提示コードの内容は把握していません。
エラーについてのみ回答します。

new_ws.cell(a, b).value = jにおいてaは複数の値を持っていますがopenpyxlではそのような指定で複数セルに一括書込みすることはできません。
かわりに以下のようにループで処理すればよいです。

Python

1# A1~A3に12,34,56を書き込む 2for idx, v in enumerate([12, 34, 56]): 3 new_ws.cell( idx+1, 1).value = v

投稿2020/08/11 01:07

can110

総合スコア38341

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問