读取excel里照片时出现:所请求的剪贴板操作失败

诺维斯基 2015-07-24 07:34:31
System.Runtime.InteropServices.ExternalException: 所请求的剪贴板操作失败。
在 System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
在 System.Windows.Forms.Clipboard.GetDataObject(Int32 retryTimes, Int32 retryDelay)
在 System.Windows.Forms.Clipboard.GetDataObject()
在 Iwebsoft.Web.USDO.UploadExcel.Page_Load(Object sender, EventArgs e)



代码是:
IDataObject iData = Clipboard.GetDataObject();


if (iData != null)
{

if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap map=(Bitmap)(Clipboard.GetImage());
}
}

有没有遇到过的哥来看一下。
...全文
875 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
如风百妍 2015-07-30
  • 打赏
  • 举报
回复
顶楼上 +1百万,大神级答案!
zsf53543831 2015-07-30
  • 打赏
  • 举报
回复
1.asp.net 在本地测试的时候,读取剪切板中的数据为null,只要在aspx页面的@Page指令中加入AspCompat="true",即可读到剪切板中的图片了。在运行中输入clipbrd,打开剪切板,是可以看到剪切板中会有excel中的图片的。 2.发布到iis上的时候,如果不加AspCompat="true",读取的剪切板的数据还是为null;加上之后,就会爆出 所请求的剪切板数据失败的错误!!到开服务器上的剪切板,完全找不到任何图片。利用网友提供的在单线程中读取剪切板中的数据,同样是爆出错误。我认为原因是,Clipboard是System.Windows.Forms下的类,在C/S窗体程序中,是完全没有问题的;而在web中,可能是iis的保护机制什么的,导致不能操作Clipboard类。 3.搞了两天,没找到用Excel类解决读取excel中的图片的办法。因此,只能利用NPOI了。

//加载excel表格
Stream stream = new FileStream(filePath, FileMode.OpenOrCreate);
 XSSFWorkbook NPOIWorkBook = new XSSFWorkbook(stream);
stream.Dispose();
                        //根据index加载带有图片的sheet
                        XSSFSheet iSheet = (XSSFSheet)NPOIWorkBook.GetSheetAt(index);
                        try
                        {
                            var documentPartList = iSheet.GetRelations();
                            foreach (var documentPart in documentPartList)
                            {
                                if (documentPart is XSSFDrawing)
                                {
                                    var drawing = (XSSFDrawing)documentPart;
                                    var shapeList = drawing.GetShapes();

                                    foreach (var shape in shapeList)
                                    {
                                        if (shape is XSSFPicture)
                                        {
                                            XSSFPicture picture = (XSSFPicture)shape;
                                            byte[] bytes = picture.PictureData.Data;
                                            using (MemoryStream ms = new MemoryStream(bytes))
                                            {
                                                using (Bitmap map = new Bitmap(ms))
                                                {
                                                    string path =  "/" + DateTime.Now.ToString("yyyyMMddHHmmssff") + ".jpg";
                                                    map.Save(Server.MapPath(path), System.Drawing.Imaging.ImageFormat.Jpeg);   
                                                }
                                            }

                                        }
                                    }
                                }
                            }

                        }
                        catch (Exception ex)
                        {
                            
                        }

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧