c# - Excel根据图像大小调整单元格大小

标签 c# .net excel image

我正在 Excel 单元格中插入图像,但通常该图像的高度和宽度都会比原始单元格大。因此,在插入图像后,我想:根据图像的大小调整特定 Excel 行和列的大小。这就是我所拥有的:

        Microsoft.Office.Interop.Excel.Application xlApp;
        Microsoft.Office.Interop.Excel.Worksheet ws;
        object misValue = System.Reflection.Missing.Value;
        xlApp = new Microsoft.Office.Interop.Excel.Application();
        Workbook wb = xlApp.Workbooks.Open(@".../MyExcelFile.xlsx");
        ws = wb.Sheets[1];

        string picPath = @"..../MyPic.png";

        System.Drawing.Image img = System.Drawing.Image.FromFile(picPath);
        var size = img.Size;

        Microsoft.Office.Interop.Excel.Range oRange = (Microsoft.Office.Interop.Excel.Range)ws.Cells[1, 5];
        float Left = (float)((double)oRange.Left);
        float Top = (float)((double)oRange.Top);
        const float ImageSize = 32;
        ws.Shapes.AddPicture(picPath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left, Top, ImageSize, ImageSize);

因此,我将图像插入到第一行的第 5 个单元格中,但将其大小设置为 32。但是,我可以访问该图像的高度和宽度。如何将第 1 行设置为该高度,将第 5 列设置为该宽度?

编辑:使用 Richard Mneyan 的当前代码,它看起来像这样,因此图像不适合单元格:enter image description here

最佳答案

如果您应用列宽与行高的比率,下面会将单元格的高度和宽度设置为相应的图片高度和宽度:

    var sh = ws.Shapes.AddPicture(picPath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, Left, Top, ImageSize, ImageSize);
    oRange.Rows[1].RowHeight = sh.Height;
    oRange.Columns[1].ColumnWidth = sh.Width;

这不是完美的答案,因为将 Excel 列宽设置为精确的数字确实很困难。例如,默认的 Excel 列宽为 8.43,下一个增量将为 8.57。为什么?;因为它是基于普通字体的编号 适合单元格的字符:https://support.microsoft.com/en-us/help/214123/description-of-how-column-widths-are-determined-in-excel

这里应用近似比率(并不完美):

        double rColRow = 6; // Ratio of units of measure: columns widths to row heights
        double rImgColWidth = 5.9; // Ratio of units of measure: image size and column widths

        oRange.Rows[1].RowHeight = (sh.Width * rColRow / rImgColWidth);
        oRange.Columns[1].ColumnWidth = (sh.Height / rImgColWidth);

关于c# - Excel根据图像大小调整单元格大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45522517/

相关文章:

c# - 使用 Visual Studio 2017 调试时为 "Request is not available in this context"

c# - float.TryParse 忽略小数点

多条件EXCEL公式

c# - 等于 NHibernate 实体的实现,unproxy 问题

c# - 如何在.NET中以格式字符串转义大括号(大括号)

c++ - 在 C++ 或 C# 中打开受密码保护的 Excel 文件提示输入密码,即使我已经传递了密码参数

vba - Excel VBA删除方法不删除标题

c# - MQTTNet 监听主题消息

c# - 使用 C# 获取应用程序的安装版本

c# - 使用 Linq 和 C#,是否可以加入两个列表但在每个项目处交错?