Python 2.7 + openpyxlを使用してワークシート内のセル範囲を移動しようとしています。簡単で基本的な仕事のように思われたことは不可能に近いことが判明しました。ここで私はそれをExcelで見たいのですがどのようである:openpyxlでは、書式設定、結合セル、式、ハイパーリンクでセル範囲を移動またはコピーする方法
タスクは簡単ですが、私は(最後の行と列に)データの末尾に与えられたセルの範囲を移動する必要があると仮定しましょうようにするには。私の最初のアイデアは簡単でした:
for i, column in enumerate(columns):
if i >= starting_col:
for j, cell in enumerate(column):
if j >= starting_row:
copy_cell(ws, j+1, i+1, j+1, i+movement)
しかし、ちょっと、どのように効率的かつ完全に実現するにはcopy_cell
? 私はコピーする必要が4つの物事に来ることをどうにか試行錯誤によって:
- 値
- スタイル
- ハイパーリンク
- 数値形式
これはかなりのように動作しませんでした私は期待していた - ほとんどのセルは正しくコピーされているが、ハイパーリンクは動作していないようで、.style属性のコピーは機能しなかった(したがって、働いていた_styleにアクセスしようとした)、最悪の問題が現れた。どのように対処するのですか?私copy_cell()
は、現時点では次のようになります。
def copy_cell(ws, from_row, from_col, to_row, to_col):
# first value
ws.cell(row=to_row, column=to_col).value = ws.cell(row=from_row, column=from_col).value
# second formatting
from_style = ws.cell(row=from_row, column=from_col)._style
ws.cell(row=to_row, column=to_col)._style = from_style
ws.cell(row=to_row, column=to_col).hyperlink = ws.cell(row=from_row, column=from_col).hyperlink
ws.cell(row=to_row, column=to_col).number_format = ws.cell(row=from_row, column=from_col).number_format
があり、全セル範囲をコピーするためのより良い、一般的な方法はありませんか?または少なくともその属性のすべてを持つセル全体ですか?そうでない場合、合併されたセル範囲を効率的に移動またはコピーする方法がありますか?
あなたは、おそらくそれは古い質問ですが、私はdeepcopy' 'に苦しんで覚え' deepcopy' –
を使用する必要があります。再帰的にコピーを実行し、セル構造内の配列の1つで失敗します。 – Artur
@CharlieClarkポインタのおかげで。これまでのところ、私は問題に遭遇していませんが、奇妙なものが発生した場合には 'deepcopy'を念頭に置いています。 –