C#读取Excel中的图片。 哪位知道啊?单元格中的文字可以读出来,但图片无法读取。谁知道这方面的技术?或写出思路。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图片和单元格没有父子关系,你可以试试 Worksheet.Pictures对象. 图片和单元格没有父子关系,-----------这个知道了你可以试试 Worksheet.Pictures对象.-------------这个试试。 你看那存储格式,好象二进制存储,找下书,很Easy的,顶你~~~ 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();}过两天结贴。 有三个地方不明白:1,”Appearance.Button“是什么?2,Clipboard.GetDataObject() 是啥?3,iData.GetDataPresent(DataFormats.Bitmap) 怎么提示错误? 请楼主告诉我把 ? 这个在剪贴板上会得到图片,if (iData.GetDataPresent(DataFormats.Bitmap)) { pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值; pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。 }这个判断,就会得不到剪贴板上面的图片信息了,如果加一个线程处理,会到得图片信息,但会让程序变得不稳定。 这是在winform里面可以 但是在web里面行不通的 if (iData.GetDataPresent(DataFormats.Bitmap)) { pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值; pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。 }这个是回去粘贴在Excel的图片,但是不能获取到插入的图片。 WPF如何设置TreeView的节点让其选中.. 请问,用C#在两个picturebox中将两个已知点连接起来怎么操作? 外部资源文件dll 存取问题!! 请问如何判断UDP传输超时????? 请问一个关于C#打包的问题 有关DLLIMPORT动态库调用的问题!!!! c#中如何写有传回值的sqlcommand 类 DropDownList的问题。 关于DNS解释问题!急~~~ 请问刷新带参数水晶报表如何不弹出“输入参数值”对话框? datagridview 第一列隐藏不了
-----------
这个知道了你可以试试 Worksheet.Pictures对象.
-------------
这个试试。
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();
}过两天结贴。
3,iData.GetDataPresent(DataFormats.Bitmap) 怎么提示错误? 请楼主告诉我把 ?
if (iData.GetDataPresent(DataFormats.Bitmap))
{
pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值;
pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。
}
这个判断,就会得不到剪贴板上面的图片信息了,如果加一个线程处理,会到得图片信息,但会让程序变得不稳定。
{
pictureBox1.Image = (Bitmap)iData.GetData(DataFormats.Bitmap); //从内存取值;
pictureBox1.Image.Save(string.Format(@"D:\{0}.jpg", row)); //保存。
}这个是回去粘贴在Excel的图片,但是不能获取到插入的图片。