将图片添加到Excel工作表时OutOfMemory

时间:2017-06-23 13:29:09

标签: c# .net excel image

我的记忆力有问题。

我想在excel中添加图片。皮卡特是天蓝色的斑点。

在添加了1k的图片之后,我的程序放慢了很多,直到出现内存异常。

我会在此处粘贴我的代码:

string filePath = @"excel.xlsx";
    int i = 0;
    public void Generate(int worksheetnumber)
    {
        using (FileStream fileStream = File.Open(filePath, FileMode.Open))
        {
            var package = new ExcelPackage(fileStream);
            ExcelWorksheet workSheet = package.Workbook.Worksheets[worksheetnumber];
            workSheet.Column(2).Width = 21;
            workSheet.Column(4).Width = 21;

            for (int j = workSheet.Dimension.Start.Row + 1; j <= workSheet.Dimension.End.Row; j++)
            {
                InsertImage(workSheet, j, 1);
                InsertImage(workSheet, j, 3);
            }

            string path = string.Format(@"{0}.xlsx", worksheetnumber);
            Stream stream2 = File.Create(path);
            package.SaveAs(stream2);
            stream2.Close();
        }
    }

    private void InsertImage(ExcelWorksheet workSheet, int j, int columnNumber)
    {
        if (!string.IsNullOrEmpty(workSheet.Cells[j, columnNumber].Text))
        {
            try
            {
                var splittedUrlHash = workSheet.Cells[j, columnNumber].Text.Split('/');
                using (var stream = DownloadBlobFileToStream(splittedUrlHash[1], splittedUrlHash[0], SHOP))
                {
                    Image image = Image.FromStream(stream);
                    var picture = workSheet.Drawings.AddPicture(string.Format("{0}{1}", j, columnNumber+1), image);
                    stream.Close();
                    picture.From.Column = columnNumber;
                    picture.From.Row = j - 1;
                    picture.To.Column = columnNumber;
                    picture.To.Row = j - 1;
                    picture.SetSize(150, 120);

                    workSheet.Row(j).Height = 100;
                    Debug.WriteLine("Dodano obrazek - {0}", i);
                    i++;
                }
            }
            catch (System.ArgumentException e)
            {

            }
        }
    }

我想承认,我在第1列和第3列中有链接图像。图像位于第2列和第4列。

在这种情况下是否有任何解决方案可以处理此错误而不会丢失图像或留下空单元格

0 个答案:

没有答案