シートの残りの部分を変更せずに、いくつかの Excel ファイル (.xls) を編集しようとしています。私がこれまでに見つけた唯一のものは、xlrd、xlwt、および xlutils モジュールです。これらの問題は、読み取り時に xlrd が数式を評価し、その答えをセルの値として配置するように見えることです。数式を保存する方法を知っている人はいますか? xlwt を使用して、数式を失うことなくファイルに書き込むことができますか? 私は Python と CLISP でほとんどの経験を積んでいますが、サポートが充実していれば、別の言語をすぐに習得できます。あなたが与えることができるどんな助けにも感謝します!
4 に答える
現在のところ、xlrd は数式を読み取りません。それらを評価するのではなく、単に読み取らないだけです。
今のところ、pywin32、Visual Basic、または VBScript (または、COM インターフェイスを備えたその他の Microsoft 対応言語) を使用して、Excel の実行中のインスタンスをプログラムで制御することをお勧めします。Excel を実行できない場合は、代わりに OpenOffice.org で同様のことができる場合があります。
この問題が発生したばかりで、数式を手動でテキストとして書き直してから、出力時に適切な数式に変換するのが最善の方法です。
そのため、 Excel を開き、引用符=SUM(C5:L5)
を"=SUM(C5:L5)"
含めて置き換えます。式に二重引用符がある場合は、2 つの二重引用符に置き換えてください。これによりエスケープされるため= "a" & "b"
、"= ""a"" & ""b"" "
)
次に、Python コードで、ソース シートと出力シートのすべてのセルをループし、次のようにします。
output_sheet.write(row, col, xlwt.ExcelFormula.Formula(source_cell[1:-1]))
この SO 回答を使用して、ソース シートのコピーを出力シートにすることで、スタイルを保持し、上から手書きのテキスト式を上書きすることを回避します。
xlwt.Formula
セルにハイパーリンクを取得できるようにするために、以前に関数を使用しました。他の数式でも機能すると思います。
更新:これは、私が使用したプロジェクトで見つけたスニペットです。
link = xlwt.Formula('HYPERLINK("%s";"View Details")' % url)
sheet.write(row, col, link)