目的としては、python経由で画像ファイルをエクセルの 'A1'セルから横3セル縦4セルの大きさで貼り付けようとしています。
以下、コードの一部で目標位置からサイズ分ループを回し、セルのサイズを取得してリサイズ目標を計算しています。
python
1 wb = openpyxl.load_workbook("testSheet.xlsx") 2 workSheet = wb[wb.sheetnames[0]] 3 Xpoints = 0.0 4 Ypoints = 0.0 5 for i in range(0,sizeX): 6 #! HACK: XXX: ここの2行でかなり違和感のある挙動 7 #! colWidth = ... の行で列幅を読むと書き込みしていないのに列幅が変わって保存される 8 #! workSheet. ...の行を追加して戻すわけだが、9/13倍しないと元の幅にならない 9 colWidth = workSheet.column_dimensions[openpyxl.utils.get_column_letter(pos[1]+i)].width 10 workSheet.column_dimensions[openpyxl.utils.get_column_letter(pos[1]+i)].width = 9 /13 * colWidth 11 #!--------------------------------------- 12 #print("width"+str(i)+" is "+str(colWidth)) 13 Xpoints = Xpoints + colWidth 14 Xpixel = cellSizeToPixel(Xpoints,isWidth = True) 15#以降、高さ取得・画像リサイズ、貼り付け部分省略
不明な挙動としてはおおよそコード内のコメント通りなのですが、
・(10行目をコメントアウトして)9行目でサイズの読み取りを行うと、列幅が広がってしまう
→読み取った値自体は正しく、手動で列幅を戻すと貼り付けた画像が指定したセル数と一致しています
・10行目で読み取った値に戻そうとすると 9/13倍する必要がある
→ 9/13 倍は widthのデフォルト値である 13 を基に試行錯誤的に発見した値です
エクセルシートは空のシートを作成して保存したものを使用しており、colWidth = 13.0と読み取られます。
(列幅を変更して実行した場合それに応じて値が変化し、画像サイズも一致します)
質問したいこととしては、「9 /13 倍して代入している部分以外で代入操作を行っていないにもかかわらず、セルサイズが変更されてしまう要因の候補はあるか」という点です。
サイズに限らず、何らか意図しないタイミングでセルの属性が書き換わってしまったことがある方がおられればそれを修正した手段を回答いただけると助かります
追加
反復した場合、広がるのが初回のみで、widthを短く入れなおすようにすると2回目以降でだんだん短くなってしまう
->読み出しによって大きくなってしまうというよりは、明示的に設定していないときexcel上の見かけ幅が9.0,数値上は13になっていて読みだしたときに見かけが数値に揃う?
見かけと設定値の食い違ったことがある方がおられればそれを修正した手段を回答いただけると助かります
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。