EPPlusを使用して、Excelファイルに同じ画像を複数回追加しようとしています。そのために次のコードを使用しています。
Image logo = Image.FromFile(path);
ExcelPackage package = new ExcelPackage(info);
var ws = package.Workbook.Worksheets.Add("Test Page");
for(int a = 0; a < 5; a++)
{
ws.Row(a*5).Height = 39.00D;
var picture = ws.Drawings.AddPicture(a.ToString(), logo);
picture.SetPosition(a*5, 0, 2, 0);
}
すべてが完全に機能し、すべての画像は正しく追加されますが、下方向に引き伸ばされます。写真の1つは次のようになります。
ただし、Excelでは次のようになります。
各画像の先頭の各行のサイズを変更する必要がありますが、それが影響しているとは思いません。写真を追加したり、やろうとしていることをしたり、手動で画像をコピーして貼り付けたりする方法はありますか? (私は写真を例として使用しています)
ありがとう。
これが最善の解決策であるかどうかはわかりませんが、間違いなくあなたの問題の回避策です。
私がやったことは次のとおりです。
ExcelPackage package = new ExcelPackage();
var ws = package.Workbook.Worksheets.Add("Test Page");
for (int a = 0; a < 5; a++)
{
ws.Row(a * 5).Height = 39.00D;
}
for (int a = 0; a < 5; a++)
{
var picture = ws.Drawings.AddPicture(a.ToString(), logo);
picture.SetPosition(a * 5, 0, 2, 0);
}
外観は次のとおりです。
何らかの理由で行の高さを設定していると、画像の高さと干渉します。
これは、C#で適用できる1つのソリューションです。
private void AddImage(ExcelWorksheet oSheet, int rowIndex, int colIndex, string imagePath)
{
Bitmap image = new Bitmap(imagePath);
ExcelPicture excelImage = null;
if (image != null)
{
excelImage = oSheet.Drawings.AddPicture("Debopam Pal", image);
excelImage.From.Column = colIndex;
excelImage.From.Row = rowIndex;
excelImage.SetSize(100, 100);
// 2x2 px space for better alignment
excelImage.From.ColumnOff = Pixel2MTU(2);
excelImage.From.RowOff = Pixel2MTU(2);
}
}
public int Pixel2MTU(int pixels)
{
int mtus = pixels * 9525;
return mtus;
}
ドキュメントを保存する前に、次を追加します。
foreach (ExcelPicture drawing in ws.Drawings)
drawing.SetSize(100);
これを試して
Image logo = Image.FromFile(path);
ExcelPackage package = new ExcelPackage(info);
var ws = package.Workbook.Worksheets.Add("Test Page");
for(int a = 0; a < 5; a++)
{
ws.Row(a*5).Height = 39.00D;
var picture = ws.Drawings.AddPicture(a.ToString(), logo);
// xlMove disables the auto resizing
picture.Placement = xlMove; //XLPlacement : xlMoveAndSize,xlMove,xlFreeFloating
picture.SetPosition(a*5, 0, 2, 0);
}
または
Image logo = Image.FromFile(path);
ExcelPackage package = new ExcelPackage(info);
var ws = package.Workbook.Worksheets.Add("Test Page");
for(int a = 0; a < 5; a++)
{
ws.Row(a*5).Height = 39.00D;
var picture = ws.Drawings.AddPicture(a.ToString(), logo);
picture.From.Column = 0;
picture.From.Row = a;
picture.SetSize(120, 150);
}
以下のコードを使用して、Excelセルの画像を調整します。
Image logo = Image.FromFile(path);
ExcelPackage package = new ExcelPackage(info);
var ws = package.Workbook.Worksheets.Add("Test Page");
for(int a = 0; a < 5; a++)
{
ws.Row(a*5).Height = 39.00D;
var picture = ws.Drawings.AddPicture(a.ToString(), logo);
picture.From.Column = 0;
picture.From.Row = a;
picture.To.Column=0;//end cell value
picture.To.Row=a;//end cell value
picture.SetSize(120, 150);
}
たとえば、例39をピクセルとして渡すと、内部的にピクセルを挿入したポイントとして取得されます。したがって、行の高さを39ピクセルに設定しようとしていると思いますが、実際には行の高さを39ポイントに設定しています。したがって、次の式に従って、行の高さは52ピクセルになります。
行の高さを39pxに設定する場合は、39の代わりに29.25ポイント(式に従って)を渡す必要があることを意味します。
points = pixels * 72 / 96
これを試してください。