Обновление # 4 ОП запоздало предоставил инструкции, чтобы подготовить пример картинки, которую он пытался извлечь:
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) Past Ctrl + V В ячейке вы видите 4 в ячейке и символ сердца заблокирован в левом верхнем углу
Я сделал это, и символ сердец без проблем вставился в мой лист. После этого метод SavePicture
в элементе 1 Insert Picture
правильно извлекает и сохраняет символ сердца на диск в виде файла .Jpg. Doh!
Обновление № 3 Проблема с ответом на этот вопрос заключалась в том, что
информация о том, как были вставлены картинки в таблицу ОП. До сих пор,
были определены три различных метода, а именно:
- Использование вставки - изображение из вкладки 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
, WorkBook
и WorkSheet
- все члены 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;