如何使用VB2010将图片从资源插入Excel工作表

时间:2014-01-26 22:12:18

标签: vb.net excel

我正在尝试使用VB2010 使用资源文件中的图片将图片添加到Excel工作表。我可以使用xlDATAWorkSheet.Shapes.AddPicture(...)编写路径,但我想从资源文件中使用它。 这就是我尝试过的: xlDATAWorkSheet.Shapes.AddPicture(CType(My.Resources.ResourceManager.GetObject("Logo"), Bitmap), False, True, 0, 0, 300, 50),但我收到错误:找不到文件(指向徽标字)*

我也尝试过: xlDATAWorkSheet.Shapes.AddPicture(My.Resources.Logo, False, True, 0, 0, 300, 50),但我得到了相同的错误:找不到文件。

它适用于硬编码图片的路径,如xlDATAWorkSheet.Shapes.AddPicture("C:/Logo.jpg", False, True, 0, 0, 300, 50),,但我想从资源文件中使用它(因此它将在另一台机器上运行)

此外,这项工作正常,因此Logo图像确实存在:

frmMain.pic1.Image = CType(My.Resources.ResourceManager.GetObject("Logo"), Image)

似乎,根据形状的MSDN文档,似乎没有AddPicture采用除字符串之外的任何内容来确定要插入的图像。

任何人都可以帮助将资源中的图片插入VB2010中的Excel工作表吗?

2 个答案:

答案 0 :(得分:1)

您可以在代码中自动使用剪贴板将图像添加到Excel中。

以下代码适用于vb net 2008。

Dim MyScoreCard As Excel.Worksheet = Nothing
Dim MyRange As Excel.Range = Nothing
Dim AwayBit As Bitmap =CType(My.Resources.ResourceManager.GetObject("picturename"),Bitmap)

Clipboard.Clear()
Clipboard.SetDataObject(AwayBit, True)
MyRange = CType(MyScoreCard.Range("Q41:Q41"), Excel.Range)
MyScoreCard.Paste(MyRange, AwayBit)

'Count will return the index of the last shape pasted to the worksheet
Dim idx As Integer
idx = MyScoreCard.Shapes.Count

'The code below will allow you to scale the image in excel from vb net
MyScoreCard.Shapes.Item(idx).LockAspectRatio =   Microsoft.Office.Core.MsoTriState.msoFalse

MyScoreCard.Shapes.Item(idx).ScaleWidth(0.75, Microsoft.Office.Core.MsoTriState.msoFalse, Office.MsoScaleFrom.msoScaleFromTopLeft)

MyScoreCard.Shapes.Item(idx).ScaleHeight(0.75, Microsoft.Office.Core.MsoTriState.msoFalse, Office.MsoScaleFrom.msoScaleFromTopLeft)

答案 1 :(得分:0)

遗憾的是,您必须传递给该excel互操作函数的参数需要一个文件路径字符串。

您可以尝试以下方法,看看它是否适合您:

  1. 将资源设置为图片框
  2. 使用以下代码将照片框中的图片保存为jpeg文件并将其保存在明确的位置(也许是驱动器C中的文件夹:):PictureBox1.Image.Save(SaveFilePath, System.Drawing.Imaging.ImageFormat.Jpeg)请注意,savefilepath不必包含.jpeg扩展名称
  3. 将savefilepath传递给字符串
  4. 使用savefilepath作为要提交到.AddPicture
  5. 的字符串
  6. 删除保存在驱动器C中的临时JPEG文件。
  7. 冗长的解决方案,是的。但是应该给予限制。