C#读取Excel中的图片。

guojh021 2008-04-17 11:55:18
哪位知道啊?

单元格中的文字可以读出来,但图片无法读取。

谁知道这方面的技术?

或写出思路。谢谢。
...全文
2466 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeyRainie 2012-08-24
  • 打赏
  • 举报
回复
if (iData.GetDataPresent(DataFormats.Bitmap))
{
pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值;
pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。
}

这个是回去粘贴在Excel的图片,但是不能获取到插入的图片。
Eric_qiang 2012-05-08
  • 打赏
  • 举报
回复
关注!
hunxiaozi 2011-04-19
  • 打赏
  • 举报
回复
这是在winform里面可以 但是在web里面行不通的
mengjixinglove 2010-06-27
  • 打赏
  • 举报
回复
这个在剪贴板上会得到图片,
if (iData.GetDataPresent(DataFormats.Bitmap))
{
pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值;
pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。
}
这个判断,就会得不到剪贴板上面的图片信息了,如果加一个线程处理,会到得图片信息,但会让程序变得不稳定。
KILLKEY 2010-03-11
  • 打赏
  • 举报
回复
我试了,内存上没有内容,是空的
沐雪架构师 2009-09-23
  • 打赏
  • 举报
回复
有三个地方不明白:1,”Appearance.Button“是什么?2,Clipboard.GetDataObject() 是啥?
3,iData.GetDataPresent(DataFormats.Bitmap) 怎么提示错误? 请楼主告诉我把 ?

[Quote=引用 11 楼 guojh021 的回复:]
C# codeprivatestring exclePath=@"E:\111.xls";privateint StartRow=2;//读的起始行privatevoid button1_Click(object sender, System.EventArgs e)
{
Excel.Application excel=new Excel.Application();//引用Excel对象 Excel.Workbook workbook= excel.Workbooks.Add(exclePath);
excel.UserControl=true;
System.Text.StringBuilder sb=new System.Text.StringBuilder();
excel.Visible=false;for (int i=0; i< workbook.Worksheets.Count; i++)//循环取所有的Sheet. {
Excel.Worksheet sheet= workbook.Worksheets.get_Item(i+1)as Excel.Worksheet;//从1开始.for (int row= StartRow; row<= sheet.UsedRange.Rows.Count; row++)
{//取单元格值;for (int col=1; col<= sheet.UsedRange.Columns.Count; col++)
{
Excel.Range range=sheet.Cells[row, col]as Excel.Range;
sb.Append(","+ col.ToString()+":"+ range.Text);
}
sb.Append(System.Environment.NewLine);//取存图片;if(sheet.Shapes.Count> row- StartRow )
{
Excel.Shape s= sheet.Shapes.Item(row- StartRow+1)as Excel.Shape;
s.CopyPicture(Appearance.Button, Excel.XlCopyPictureFormat.xlBitmap); //COPY到内存。 IDataObject iData= Clipboard.GetDataObject();if (iData.GetDataPresent(DataFormats.Bitmap))
{
pictureBox1.Image= (Bitmap)iData.GetData(DataFormats.Bitmap);//从内存取值; pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row));//保存。 }else
{
pictureBox1.Image=null;
}
}
}
}
workbook.Close(false,null,null);
excel.Quit();
}

过两天结贴。
[/Quote]
沐雪架构师 2009-09-23
  • 打赏
  • 举报
回复
楼主,你写的这方法可行吗 ? 我最近也遇到同样的问题,没办法,先用你的试试!!
沐雪架构师 2009-09-23
  • 打赏
  • 举报
回复
我也来顶一下。嘎嘎!!
liangguangneu 2008-07-11
  • 打赏
  • 举报
回复
够厉害
SkyIsland 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aa162504 的回复:]
在这里帮楼主顶~
[/Quote]
starlessnt 2008-04-18
  • 打赏
  • 举报
回复
好样的! 顶你

yagebu1983 2008-04-18
  • 打赏
  • 举报
回复
顶!!
yunfeng007 2008-04-18
  • 打赏
  • 举报
回复
很好很强大
guojh021 2008-04-18
  • 打赏
  • 举报
回复
private string exclePath  = @"E:\111.xls";
private int StartRow = 2; //读的起始行
private void button1_Click(object sender, System.EventArgs e)
{
Excel.Application excel = new Excel.Application();//引用Excel对象
Excel.Workbook workbook = excel.Workbooks.Add(exclePath);
excel.UserControl = true;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
excel.Visible = false;
for (int i = 0; i < workbook.Worksheets.Count; i++)//循环取所有的Sheet.
{
Excel.Worksheet sheet = workbook.Worksheets.get_Item(i + 1) as Excel.Worksheet;//从1开始.
for (int row = StartRow; row <= sheet.UsedRange.Rows.Count; row++)
{
//取单元格值;
for (int col = 1; col <= sheet.UsedRange.Columns.Count; col++)
{
Excel.Range range =sheet.Cells[row, col] as Excel.Range;
sb.Append("," + col.ToString() + ":" + range.Text);
}
sb.Append(System.Environment.NewLine);
//取存图片;
if(sheet.Shapes.Count > row - StartRow )
{
Excel.Shape s = sheet.Shapes.Item(row - StartRow + 1) as Excel.Shape;
s.CopyPicture(Appearance.Button, Excel.XlCopyPictureFormat.xlBitmap); //COPY到内存。
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值;
pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。
}
else
{
pictureBox1.Image = null;
}
}
}
}
workbook.Close(false,null,null);
excel.Quit();
}


过两天结贴。
guojh021 2008-04-17
  • 打赏
  • 举报
回复
图片和单元格没有父子关系,
-----------
这个知道了

你可以试试 Worksheet.Pictures对象.
-------------
这个试试。
gomoku 2008-04-17
  • 打赏
  • 举报
回复
图片和单元格没有父子关系,你可以试试 Worksheet.Pictures对象.
guojh021 2008-04-17
  • 打赏
  • 举报
回复
谢谢1楼~
aa162504 2008-04-17
  • 打赏
  • 举报
回复
在这里帮楼主顶~
tzj56777 2008-04-17
  • 打赏
  • 举报
回复
好像是读2进制的数据
O溺水的鱼0 2008-04-17
  • 打赏
  • 举报
回复
你看那存储格式,好象二进制存储,找下书,很Easy的,顶你~~~
加载更多回复(1)

110,579

社区成员

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

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

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