C# EPPlus 图片高度在放入单元格 B1 时变长

C# EPPlus picture height getting stretch when placed into cell B1

我正在尝试将图片放入 B1 单元格。正在插入图片,但高度比原始图片大。

我使用的是 EPPlus 4.0.6.0 版和 .Net 4.5.2 版。使用 VS IDE 2013.

这是输出截图。

想要的输出截图

这是我用来将 图片放入 B1 单元格的代码示例。

if (imgCompanyLogo != null)
{
    var picture = ws.Drawings.AddPicture("Test", imgCompanyLogo);
    int pixelHeight=GetHeightInPixels(ws.Cells[1,2]);
    int pixelWidth = GetWidthInPixels(ws.Cells[1, 2]);
    picture.SetSize(pixelWidth, pixelHeight);
    picture.SetPosition(0, 0, 1, 0);
}

下面的代码片段摘自此 post

private static int GetHeightInPixels(ExcelRange cell)
{
    using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
    {
        float dpiY = graphics.DpiY;
        return (int)(cell.Worksheet.Row(cell.Start.Row).Height * (1 / 72.0) * dpiY);
    }
}

public static float MeasureString(string s, Font font)
{
    using (var g = Graphics.FromHwnd(IntPtr.Zero))
    {
        g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

        return g.MeasureString(s, font, int.MaxValue, StringFormat.GenericTypographic).Width;
    }
}

private static int GetWidthInPixels(ExcelRange cell)
{
    double columnWidth = cell.Worksheet.Column(cell.Start.Column).Width;
    Font font = new Font(cell.Style.Font.Name, cell.Style.Font.Size, FontStyle.Regular);

    double pxBaseline = Math.Round(MeasureString("1234567890", font) / 10);

    return (int)(columnWidth * pxBaseline);
}

我的问题是图片高度在放入 B1 单元格后变长了。我无法理解我的代码中缺少什么。

我也试过用这种方法测量图片的高度和宽度,但还是不行。

decimal mdw = ws.Workbook.MaxFontWidth;
int pixelHeight = (int)(ws.Row(1).Height / 0.75);
int pixelWidth = (int)decimal.Truncate(((256 * (decimal)ws.Column(2).Width + decimal.Truncate(128 / (decimal)mdw)) / 256) * mdw);

请告诉我图片高度被拉伸的方法有什么问题。 谢谢

我的问题已解决。

if (imgCompanyLogo != null)
{
    var picture = ws.Drawings.AddPicture("Test", imgCompanyLogo);
    picture.EditAs = OfficeOpenXml.Drawing.eEditAs.TwoCell;
    picture.SetPosition(0, 0, 1, 0);
}

这一行解决了问题。 picture.EditAs = OfficeOpenXml.Drawing.eEditAs.TwoCell;

但有一件事不清楚,为什么我需要将我的图像分布在两个单元格中?

谢谢