31

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 では次のように表示されます。

ここに画像の説明を入力

各画像の先頭の各行のサイズを変更する必要がありますが、それが影響しているとは思いません。写真を追加する/私がやろうとしていることをする方法はありますか、それとも手動で画像をコピーして貼り付ける必要がありますか? (写真は例として使用しています)

ありがとう。

4

6 に答える 6

17

これは、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;
}
于 2013-12-10T20:52:48.973 に答える
1

以下のコードを使用して、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);
        }
于 2013-06-27T14:52:19.877 に答える
1

これを試して

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);
}
于 2012-08-07T23:20:47.723 に答える
1

ドキュメントを保存する前に、次の権限を追加します。

foreach (ExcelPicture drawing in ws.Drawings)
   drawing.SetSize(100);
于 2012-11-21T21:04:59.590 に答える
0

例 39 をピクセルとして渡すと、内部的にはピクセルではなくポイントとして取得されるため、行の高さを 39 ピクセルに設定しようと考えていますが、実際には行の高さを 39 ポイントに設定しています。したがって、次の式に従って、行の高さは 52 ピクセルになります。

行の高さを 39px に設定する場合は、39 の代わりに 29.25 ポイント (数式によると) を渡す必要があることを意味します。

points = pixels * 72 / 96

これを試してみてください。

于 2012-08-06T10:07:00.870 に答える