Python - openpyxl - 等号 (,=,) で始まる文字列を書き込む

okwaves2024-01-25  12

データベースからランダムなテキスト文字列を取得し、openpyxl を使用して xlsx ファイルに書き込んでいます。一部の文字列はたまたま等号で始まっています (「=134lj9adsasf&^」など)。これにより、Excel がそれを数式として解釈しようとして「#NAME?」として表示されるという問題が発生します。エラーのため。

Excel 自体では、文字列を書き込む前にセルの形式を [一般] から [テキスト] に変更することで、この問題を回避できます。 openpyxlでこれを実行しようとしましたが、違いはありません。生成されたスプレッドシートを開くと、セルがテキスト形式であるように表示されますが、それでもエラーが表示されます。これを回避するにはどうすればよいですか?

実際の例を以下に示します。 Excel でファイルを開くと、#NAME? と表示されます。 3番目のセルの場合。それでも、もし私がセルを選択して「=abc?123」と入力するだけです。 (引用符なし)、Excel は問題なくテキストを受け入れます。

import openpyxl
from openpyxl.cell.cell import Cell

stringList = [("abc","123","=abc?123","ok")]
wb = openpyxl.Workbook()
ws = wb.create_sheet('Sheet1')
for row in stringList:
    ws.append(row)
    for idx, cell in enumerate(ws[ws.max_row]):
        cell.number_format = '@'  # Set all cells to text format to avoid issue with =
        cell.value = str(row[idx]) # Re-write data
wb.save("filename.xlsx")


------------------------

私はそれを理解しました。必要なのは、number_format ではなく data_type を変更することだけです。

equals で始まる文字列の data_type は「f」に設定されています。

for row in stringList:
    ws.append(row)
    for cell in ws[ws.max_row]:
        if cell.data_type == 'f':
            cell.data_type = 's'

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。