EPPlus AddPicture导致Excel 2007文件损坏

时间:2011-07-14 07:47:24

标签: c# asp.net excel

我正在尝试通过EPPlus在Excel 2007工作簿中添加一些图片,但是当我使用时 From.Column和From.Row打开生成的xlsx文件时出现此错误:

enter image description here

提前感谢您的帮助。 这是我的代码:

    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < row.ItemArray.Length; i++)
        {
            if (!row.ItemArray[i].ToString().Contains(';'))
            {
                wrksht.Cells[_rows, i + 1].Value = row.ItemArray[i];
            }
            else
            {
                if (row.ItemArray[i].ToString().Split(';')[0] == "img")
                {
                    if (File.Exists(row.ItemArray[i].ToString().Split(';')[1]))
                    {
                        System.Drawing.Image img = System.Drawing.Image.FromFile(row.ItemArray[i].ToString().Split(';')[1]);
                        OfficeOpenXml.Drawing.ExcelPicture pic = wrksht.Drawings.AddPicture(
                                (_rows + i * new Random(_rows + i).Next()).ToString(), img
                                );
                        pic.SetSize(img.Width + 5, img.Height + 5);
                        pic.From.Column = i + 1;
                        pic.From.Row = _rows;
                        pic.From.RowOff = ExcelHelper.Pixel2MTU(1);
                        pic.From.ColumnOff = ExcelHelper.Pixel2MTU(1);
                    }
                }
            }
        }
        _rows++;
    }

2 个答案:

答案 0 :(得分:0)

var img = Image.FromFile(row.ItemArray[i].ToString().Split(';')[1]);
var pic = wrksht.Drawings.AddPicture((_rows + i * new Random(_rows + i).Next()).ToString(), img);
//pic.SetSize(img.Width + 5, img.Height + 5);
//pic.From.Column = i + 1;
//pic.From.Row = _rows;
//pic.From.RowOff = ExcelHelper.Pixel2MTU(1);
//pic.From.ColumnOff = ExcelHelper.Pixel2MTU(1);
pic.SetPosition(_rows-1, 0, i, 0); // always one less than actual value

答案 1 :(得分:0)

您使用的行:

System.Drawing.Image img = System.Drawing.Image.FromFile(row.ItemArray[i].ToString().Split(';')[1]);

如果您将图像转换为位图,则问题将解决。您可以尝试以下代码:

Bitmap newImage= new Bitmap(System.Drawing.Image.FromFile(row.ItemArray[i].ToString().Split(';')[1]));

这可以解决您的问题。