读取EXCEL表格中的图片

在EXCEL表格内放置图片,假设表格的大小大于图片的宽高,图片完全置于表格内,如何读取某个表格内的图片呢?使用微软的EXCEL组件,直接从CELL或RANGE对象内是无法读取的。图片是独立于单元格的,不从属于任何单元格,因此无法将图片与CELL或RANGE做对象级上的联系。所有图片都隶属于Shapes集合。每一张图片是一个shape判断一张图片是否在某一单元格内,可以使用坐标位置的方法,如果图片的位置在单元格的位置的高宽范围内,则表示图片在单元格内。判断出一张图片在某单元格内后,可以使用shape对象的CopyPicture方法,将图片复制到剪贴板,再从剪贴板内将图片存到本地。
示意代码如下:

for (int row = 1; row <= ws.UsedRange.Rows.Count; row++)
{
    for (int col = 1; col <= ws.UsedRange.Columns.Count; col++)
  {
      Range rge = ws.Cells[row, col] as Range;
      foreach (Shape sh in ws.Shapes)
    {
        Range rg = excel.get_Range(sh.TopLeftCell, sh.BottomRightCell);
        if (excel.Intersect(rge, rg, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
          Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
          Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing) != null)
      {
          sh.CopyPicture(Appearance.Button, Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlBitmap);
          IDataObject data = Clipboard.GetDataObject();
          if (data.GetDataPresent(DataFormats.Bitmap))
          {
              Image image = (Image)data.GetData(DataFormats.Bitmap, true);
              image.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
          }
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值