我之前问过Question,但似乎没有人可以回答。 所以,我现在改变了我的问题。我发现实际上这个代码工作并将图片复制到剪贴板。但是当代码在WinXp上运行时,它似乎无法正常工作,甚至无法检测到Clipboard.ContainImage。那么有谁知道如何解决这个或任何指南?
For Each sp As EXCEL.Shape In xlsheet.Shapes
sp.Copy()
picname = sp.Name
If Strings.Left(picname, 5) = "Group" Then
If My.Computer.Clipboard.ContainsImage Then
xlPic = My.Computer.Clipboard.GetImage
PictureBox1.Image = xlPic
ImageList1.Images.Add(xlPic)
Else
sp.Copy()
xlPic = My.Computer.Clipboard.GetImage
PictureBox1.Image = xlPic
ImageList1.Images.Add(xlPic)
End If
End If
Next
更新
实际上我在这些代码中没有错误。但问题是。当我在Win XP上运行此应用程序时。 Clipboard.ContainsImage无法检测到我的PictureBox无法获取剪贴板中包含的图像。我试图粘贴到Paint,它可以,但是通过程序运行,它不能。在Win 7中运行时,运行良好。
答案 0 :(得分:1)
尝试这个,它适用于Win XP,VS2010和Excel2007:
appExcel = CreateObject("Excel.Application")
wbExcel = appExcel.Workbooks.Open(Filename)
wsExcel = wbExcel.Worksheets(1)
For Each oShape As Shape In wsExcel.Shapes
If oShape.Name.StartsWith("Picture") Then
Clipboard.Clear()
oShape.CopyPicture(XlPictureAppearance.xlScreen, XlCopyPictureFormat.xlBitmap)
If Clipboard.ContainsImage() Then
Dim img As Image
img = Clipboard.GetImage()
PictureBox1.Image = img
PictureBox1.Visible = True
Exit For
End If
Next oShape
答案 1 :(得分:0)
您无法(可靠地)期望将数据复制到剪贴板,然后立即将其粘贴。其他应用程序正在对剪贴板更新做出反应,同时可能会发生很多其他应用程序。您可能/可能无法粘贴图像,因为某些其他应用程序已打开剪贴板进行粘贴。您可以在复制后引入sleep(),然后躲开它。 请记住,以这种方式使用剪贴板是不礼貌的。提供剪贴板是为了方便用户而不是PROGRAMMER。
答案 2 :(得分:-1)
尝试替换
的所有实例sp.copy()
与
my.computer.clipboard.setimage(sp)
可以在此处找到setImage方法文档:http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setimage.aspx