C# epplusライブラリでエクセルに挿入した画像の表示比率が崩れるので、直したい
C#でサーバ側でテンプレート(.xlsx)を用意して、クライアント(html)から
postでリクエストされた値を入れ、ダウンロードダイアログを表示させるプログラムを作成しています。
ライブラリに「epplus 4.1.0」を使用しているのですが、
以下のコードのように実装すると、エクセルに挿入したpng画像の縦横の表示サイズと比率が崩れてしまいます。挿入する画像は縦横100pxです。
[コード]
byte[] source;
MemoryStream stream = new MemoryStream();
using(var template = System.IO.File.OpenRead(@/template.xlsx))
using(var excel = new ExcelPakage(stream, template))
{
ExcelWorkSheet workSheet = excel.Workbook.Worksheets.Where(s => s.Name
=="Sheet1").FirstOrDefault();
System.Drawing.Image img = System.Drawing.Image.FromFile(@/logo.png);
using(var picture = worksheet.Drawings.AddPicture("画像",img)){
int imageHeight = picture.Image.Height; //ここは100が取得されていることを確認
int imageWidth = picture.Image.Width; //ここは100が取得されていることを確認
picture.setSize(100)
}
package.Save();
}
source = stream.ToArray();
return source;
[実行結果]
ダウンロードしたExcelファイルの画像をExcel2016>図形の書式設定>サイズで確認すると、
高さ:3.18cm
幅:2.82cm
高さの倍率:150%
横の倍率:133%
縦横比を固定する:チェックあり
元のサイズを基準にする:チェックあり となります。
関係あるのかわかりませんが画面解像度は120DPIでした。
リセットボタンを押すと、もともとの正しい画像サイズに戻ります。
[質問内容]
①上記について何か原因、解決方法をご存知の方がいらっしゃいましたら教えていただけないでしょうか。
②epplusにこだわっているわけではないので、他の方法で
サーバ上でエクセルを編集後(上記の問題を回避)、ダウンロードダイアログをクライアントに表示させる機能を実現する方法はありますでしょうか?epplus はbyte[]が作成できるため使用しています。(COMを使用してみましたが、エクセルのオブジェクトをダウンロードさせるためにレスポンスで返す方法がわかりませんでした。)
(20170920追記)
pgrhoさん
1.DPI設定については記載頂いた通りの方法で96dpiに設定することが出来ました。
画像比率は崩れたままでした。
2.アドバイス頂いたとおり画像を挿入するセルに対して
事前に画像が収まるように縦横を設定したところ、
表示比率が原寸大で表示させることができました。
[コード例]
sheet.Column(1).Width = 100
sheet.Row(1).Height = 100
COMはサーバでの使用は認められてないのですね・・・勉強不足でした。
eoplusを使用してテンプレートのセルサイズを調整する方法で協議したいと思います。
ご回答ありがとうございました。