【Python】ValueError: Cannot convert (‘木’,) to Excel が発生した原因と対処法|openpyxlエラー完全解説

目次

使用環境

  • OS:Windows 10 Pro(バージョン:20H2)
  • 言語:Python(pandas、openpyxl使用)

経緯

Pythonを使い、pandasで抽出したデータをopenpyxl経由でExcelに貼り付けようとしたところ、
次のエラーが発生しました。

ValueError: Cannot convert ('木',) to Excel

データを確認すると、
**「木」「林」「森」「4」「8」「12」**と並ぶ表があり、
1行目にカラム、2行目にデータが存在している構成でした。

このエラーへの対処と、より良いやり方を整理しました。


エラー原因

今回のエラーは、
セルに渡そうとした値が文字列ではなく、タプル型(tuple)になっていたために発生しています。

openpyxlでは、
文字列型(str)、数値型(int、float)、日付型(datetime)などのシンプルな型しか、セルに書き込むことができません。
タプルやリストなどの複合型をそのまま渡すとエラーになります。


あなたが採った応急処置方法(正しいアプローチ)

  • 一旦データをすべて数値に変換してから貼り付ける
  • その後、カラム名(木・林・森)を個別に手動で設定する

これは確かに実用的で正しいやり方です。
しかし、もっとスマートにエラーを防ぎながらデータを貼り付ける方法も存在します。


根本的な対処法:タプルを文字列に変換してから貼り付ける

タプルをセルに渡す直前で文字列に変換してしまえば、
エラーなく処理できます。

改善版コード

import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows

# ワークブックとシート作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "sheet1"

# データフレームを行ごとに取得
rows = dataframe_to_rows(data, index=False, header=True)

row_start = 1
col_start = 1

for row_no, row in enumerate(rows, row_start):
    for col_no, value in enumerate(row, col_start):
        # タプル型なら文字列に変換
        if isinstance(value, tuple):
            value = "".join(map(str, value))
        ws.cell(row=row_no, column=col_no).value = value

ポイント解説

  • **isinstance(value, tuple)**で、タプルかどうか判定します。
  • タプルなら、**"".join(map(str, value))**で中身を結合して文字列化します。
  • これにより、「(‘木’,)」のようなデータでも「木」という単純な文字列として書き込めるようになります。

補足:なぜタプルになったのか?

もともとのDataFrameで、

  • 複数列まとめて1セルに格納しようとした
  • あるいは何らかの加工時にタプルになってしまった

といった背景が考えられます。
特に、SQL抽出や結合処理後にタプル化するケースがよくあります。


まとめ

PythonでValueError: Cannot convert (‘木’,) to Excelが発生した場合は、

  • セルに渡す前にデータ型を確認する
  • タプル型の場合、文字列に変換してから書き込む
  • 根本対策として、データ準備段階で型を整えるのも有効

これらを意識することで、
エラーなくスムーズにExcelファイル出力が可能になります。

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次