NPOI 匯入圖片進入Excel

{

double ColWidth = 540.0;


Func<IPicture, (double width, double height)> GetImageDimensions = (pict) =>

{

    try

    {

        return (pict?.GetImageDimension().Width ?? 0, pict?.GetImageDimension().Height ?? 0);

    }

    catch (Exception ex)

    {

        return (0, 0);

    }

};


 byte[] buffer = File.ReadAllBytes(path);

//建立 pic

int picIdx = workbook.AddPicture(buffer, PictureType.PNG);


//建立 畫圖區

var drawing = sheet.CreateDrawingPatriarch();

//確認方位 偏移x1 y1 x2 y2 建立在 colx1 rowy1 colx2 rowy2 

XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, i, 10, i + 1);

//確認位置後建立圖片

var pict = drawing.CreatePicture(anchor, picIdx);


//取得原始長寬 這段要用來縮放圖片

var ImageSize = GetImageDimensions(pict);


//catch error 回0

if (ImageSize.width == 0 || ImageSize.height == 0)

{

    _logger.LogInformation(string.Format($"匯出-完工報告 圖片來源 : {0} , 匯入失敗", list));

    continue;

}


//依照寬度進行圖片調整 小的拉長 大的縮小

// 取得比例

//依照圖片高度建立Row

row.Height = Convert.ToInt16(ImageSize.height * (ColWidth / ImageSize.width) * 16);

}


這邊有幾點注意
第一 
這段 XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, i, 10, i + 1); 確立範圍的同時也確立寬高了

寬就是由 0 到 10 col 初 然後由第 i row 到 第 i + 1 row
        col   col   col   col   col   col   col   col   col         col 
row ¯0 , i                                                                   10 , i + 1ˍ
row  
row

因此只需要控制 row 高度 跟 col總和的寬度 就可以控制圖片大小了
不建議使用 pict.Resize(x , y);
因為這時候pict的長寬比 並不是原始圖片的長寬比 而是目前的長寬 也就是col寬總和 row高總和


留言

這個網誌中的熱門文章

無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。

MongoDB 入門

DDD With MVC