2011-07-14 65 views
2

我试图通过EPPlus添加一些图片在Excel 2007工作簿但是当我使用 From.Column和From.Row我打开生成的XLSX文件时出现此错误:EPPlus给AddPicture导致Excel 2007年文件损坏

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++; 
    } 

回答

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 
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])); 

这可能会解决您的问题。