【问题标题】:Extract images from Excel sheet with Delphi使用 Delphi 从 Excel 工作表中提取图像
【发布时间】:2019-08-21 05:35:36
【问题描述】:

我有一张 Excel 表格,在几个单元格中,我在单元格的左上角有一张图片。这些图片的行为就像它们“附加”到给定的单元格一样,因为如果我更改单元格的边界,它的图片会随之移动。

如何提取这些图片并使用 Delphi 将它们保存到文件中?

【问题讨论】:

  • 您好,弗兰斯,欢迎您。当您提出更具体的问题时,您更有可能得到对您(和其他人)有价值的答案。 Delphi 在线 (google.com/search?q=read+excel+delphi&oq=read+excel+delphi) 提供了许多使用 Excel 的示例。尝试一下,当您遇到问题时,可以随时回来提出问题。
  • 你好 Wouter,我知道有很多示例,但总是将 tekst 和图像写入 Excel 并从 Excel 读取文本,但我找不到加载附加到 Excel 中单元格的 ppicture 的 delphi 示例。
  • 我了解您想要做什么,但我的后兜里没有现成的答案供您使用。这个网站上可能有数百人 - 可以 - 帮助您解决此问题,但如果您以错误的方式提出问题,那么任何人都会努力帮助您的可能性很小。我只是想帮助你在这个网站上自助,因为我看到你是新来的。否则我自己也会跳过这个问题。没有人会从头到尾牵着你的手,所以对于你自己真的无法弄清楚的东西,你会得到短暂的关注。
  • 最后提示:如果您安装了 excel,您可以将其实例化为 com 对象。如果我没记错的话,工作表包含一个您可以迭代的pictures 属性。也许需要调查一下。
  • 如果我记得,图像不一定在单元格内,而是位于整个工作表中。

标签: excel image delphi extract


【解决方案1】:

更新 #4 OP 迟来提供了准备他一直试图提取的图片示例的说明:

1) 转到 nbbclubsites.nl/club/8000/uitslagen 2) 点击“TKDmm, ronde 1 [1]” 3) 点击 -14- 13/3 4) 点击“BC Den Dungen-1” 5) 选择 de 4 和心形符号 6) 复制 Ctrl+C 7) 打开 Excel 并选择单元格 (1,1) 8) 过去 Ctrl+V 在单元格中您会看到单元格中的 4 并且心形符号锁定左上角

我这样做了,心符号粘贴到我的工作表中没有任何问题。之后,1 Insert Picture 项中的SavePicture 方法会正确提取红心符号并将其作为 .JPG 文件保存到磁盘。呵呵!

更新 #3 回答这个问题的一个问题是没有 有关如何插入 OP 电子表格中的图片的信息。迄今为止, 已经确定了三种不同的方法,即:

  • 使用插入 - Excel 插入选项卡中的图片
  • 使用插入 - Excel 插入选项卡中的对象
  • 使用所选单元格上下文菜单中的插入注释

下面我展示了每种方法的代码示例。

1.插入 - 图片

procedure TForm1.InsertPicture;
begin
  Worksheet.Pictures.Insert('C:\Users\ma\Pictures\photo-2.JPG');
end;

procedure TForm1.SavePicture;
var
  Picture : OleVariant;
begin
  Picture := Worksheet.Pictures[1];
  Picture.Select;
  Picture.Copy;
  SaveClipboard;
end;

2。插入 - 对象

procedure TForm1.InsertAsObject;
begin
  WorkSheet.OLEObjects.Add(Filename:='C:\Users\ma\Pictures\wall.bmp', Link :=False,
    DisplayAsIcon:=False).Select;
end;

procedure TForm1.SaveObjectBmp;
var
  Shape : OleVariant;
begin
  Caption := IntToStr(WorkSheet.OleObjects.Count);
  WorkSheet.OLEObjects[1].Select;
  WorkSheet.OLEObjects[1].CopyPicture;
  Shape := WorkSheet.OLEObjects[1].ShapeRange.Item(1);
  Shape.CopyPicture(xlScreen, xlBitMap);
  SaveClipboard;
end;

3.作为单元格注释插入

procedure TForm1.InsertCommentPicture;
var
  Cell,
  Comment : OleVariant;
begin
  Cell := WorkSheet.Cells.Range['b2', 'b2'];
  Comment := Cell.AddComment;
  Comment.Shape.Fill.UserPicture('C:\Users\ma\Pictures\photo-2.JPG');
  Comment.Visible := True;
end;

procedure TForm1.SaveCommentPicture;
var
  Cell,
  Comment,
  Shape,
  Picture : OleVariant;
begin
  Cell := WorkSheet.Cells.Range['B2', 'B2'];
  Comment := Cell.Comment;
  Comment.Visible := True;

  Shape := Comment.Shape;
  Shape.CopyPicture(xlScreen, xlBitMap);
  SaveClipBoard;
end;

SaveClipBoard 方法和 FormCreate 方法如下所示。 Excel, WorkBookWorkSheet 都是表单的 OleVariant 成员。

procedure TForm1.SaveClipboard;
// With thanks to the author of http://delphi.cjcsoft.net/viewthread.php?tid=46877
var
  myBitmap: TBitmap;
  myJpegImg: TJpegImage;
  SaveFileName: string;
begin
  Caption := IntToStr(Clipboard.FormatCount)  + ':' + IntToStr(Clipboard.Formats[0]);
  SaveFileName := ExtractFilePath(FileName) + 'Saved.Jpg';
  myBitmap := TBitmap.Create;
  myJpegImg := TJpegImage.Create;
  try
    if Clipboard.HasFormat(cf_Bitmap) then
      begin
        myBitmap.Assign(clipboard);
        myJpegImg.Assign(myBitmap);
        myJpegImg.SaveToFile(SaveFileName);
      end
    else
      ShowMessage('No graphic on the clipboard');
  finally
    myBitmap.FreeImage;
    myJpegImg.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Excel := CreateOleObject('Excel.Application');
  Excel.Visible := True;
  FileName := ExtractFilePath(Application.ExeName) + 'PictureBook.Xlsx';
  WorkBook := Excel.Workbooks.Open(FileName);
  WorkSheet := WorkBook.ActiveSheet;
end;

【讨论】:

  • 下面的例子都是反过来的。将图片保存到 Excel 单元格有很多示例。主要是 vba 示例。上面的消息:图片不绑定到特定的工作表单元格”对于我拥有的 excel 表来说不是真的。图片保持在单元格的左上角。如果我将单元格复制到另一个单元格图像与它一起。我需要从单元格中提取此图像的delphi源。不要将图像保存到单元格中。同样使用vba,我的nolidge没有提取图片的示例。我可以发送一个excel示例,但我看到了我无法附加文件。
  • 嗯。你说的“在单元格的左上角有一张图片”,而不是“附加到”,所以你需要重新写你的 q 否则其他人可能会浪费他们的时间来回答它,以及我。你怎么知道图片“附加”到特定的单元格?什么行为表明它是?
  • 我认为图片附加到单元格,因为如果我调整单元格大小或复制单元格,图片始终在左上角可见。附上我的意思是我不能添加附件来显示我的意思
  • 我没有附上图片,因为如果我这样做了,我会提取图片。我收到了许多单元格中附有图片的 Excel 表格
  • 我做了一些研究,发现正确的表达方式必须是:“图片被锁定到excel单元格”所以我想用Delphi代码保存那些锁定的图像。
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多