前提・実現したいこと
C#のExcel操作をEPPlusを使っています。
エクセルファイルを読み込んだ場合の、画像の追加を正常に行いたいです。
発生している問題・エラーメッセージ
テンプレートを読み込み、AddPictureで画像を追加すると、 画像の表示はされるのですが、縦横が100%で表示されません。 エクセルの図の書式設定を見ると、基本的に高さが小さく、幅が大きくなっています。 「縦横比を固定する」、「元のサイズを基準にする」のチェックボックスはONになっています。
該当のソースコード
C#
1var excel = new ExcelPackage(new FileInfo("テンプレートのファイルパス")); 2 3var ws = excel.Workbook.Worksheets[1]; 4 5var picture = ws.Drawings.AddPicture("pic", Image.FromFile("画像ファイルパス")); 6 7excel.SaveAs(new FileInfo("保存ファイル名"));
試したこと
「EPPlus 画像」で検索し、エクセルを読み込み画像を張り付け、エクセルの出力はできております。
画像をよく見ると縦と横の比率が元の画像と違っていたので、いろいろ試しています。
縦横ともセルのサイズより大きい画像を出力しており、縦が114%前後、幅が88%前後で画像が表示されています。
SetPositionで移動すると、また倍率がずれます。
試しにA1セルのサイズを画像サイズより大きくして出力すると縦横100%で表示されますが、画像以外も表示したいので、この幅は使えません。
A1を大きくし、出力した後にセルサイズを変更しても変更したサイズで画像の縦横が変わってしまいます。
取り急ぎの対応策として、縦と横をそれぞれ適当な値を乗算し、100%に近い状態で出力しています。
「epplus 画像 縦横比」で検索し、以下3つのURLの方法を試したのですが、どれもうまく動きませんでした。
https://ja.stackoverflow.com/questions/38046/c-epplus%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%81%AB%E6%8C%BF%E5%85%A5%E3%81%97%E3%81%9F%E7%94%BB%E5%83%8F%E3%81%AE%E8%A1%A8%E7%A4%BA%E6%AF%94%E7%8E%87%E3%81%8C%E5%B4%A9%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7-%E7%9B%B4%E3%81%97%E3%81%9F%E3%81%84
http://moc67.blog.fc2.com/blog-entry-12.html
https://stackoverrun.com/ja/q/10983603
GitHudからEPPlus自体をダウンロードし、
https://github.com/JanKallman/EPPlus/releases
EPPlus Sample Projects for version 4.5.3
EPPlus.sample.projects.for.NET.zip
のSampleApp.CoreのSample6が画像の出力をしており、出力されたエクセルを確認すると、縦横100%で出力されていました。
SanpleではEPPlusでブックを作成し画像を張り付けています。
試しにテンプレートを読み込まず、EPPlusでブックを作成し、そこに画像を追加した場合は、縦横比が正しく表示されました。
デフォルトの幅がテンプレート(エクセルで作成も同じ)は8.38(72ピクセル)、EPPlusのエクセルは8.43(64ピクセル)
と違っていたので、一旦EPPlusで空のブックを作成し、それをテンプレート2として読み込み、最初のテンプレートにシートをコピーしようとしたのですが、以下のエクセプションが発生してしまいました。
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
C#
1var excel = new ExcelPackage(new FileInfo("テンプレート1のファイルパス")); 2 3var excel2 = new ExcelPackage(new FileInfo("テンプレート2のファイルパス")); 4 5var ws = excel2.Workbook.Worksheets[1]; 6var picture = ws.Drawings.AddPicture("pic", Image.FromFile("画像ファイルパス"));// この行をコメントアウトするとエラーは起きません 7 8excel.Workbook.Worksheets.Add("コピー先", ws);// ここでエラー 9 10excel.SaveAs(new FileInfo("出力ファイル名"));
画像があるブック(自分自身)にコピーや、画像がない場合の別のブックにコピーでは問題なく動きました。
対応していただきたい内容
※前提条件
プログラムでは画像の出力だけをしたいのではないので、エクセルで作ったものを読み込んでの画像貼り付け。
画像の拡縮率は100%で変更しないが、画像のサイズは固定ではありません。
- エクセルで作成したファイルに画像を読み込み、縦横が100%で表示できる方法
2. 1.が無理な場合の対応内容
別のブックへの画像があるシートのコピー
その他の方法
別のライブラリを使用
以上、宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
EPPlus 4.5.3.1
.Net Framework 4
WindowsFormアプリケーションで作成しています
回答2件
あなたの回答
tips
プレビュー