Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
4th
Фев
Выгрузка TImage в Excel
Posted by obzor under Lazarus, Free Pascal
На форме есть TImage с изображением. Пытаюсь вставить в Excel: копирую изображение из TImage в буфер обмена. Затем вставляю в Excel с помощью команды PasteSpecial. В итоге на PasteSpecial все время возникает исключение EOleException с текстом:
Метод PasteSpecial из класса Worksheet завершен неверно.
procedure TfmMain.TestBtnClick(Sender: TObject);
var Img: TImage;
xla: Variant;
xls: Variant;
begin
Img:=TImage.Create(nil);
xla := CreateOleObject('Excel.Application');
xla.Workbooks.Add;
xls := xla.Workbooks[1].WorkSheets[1];
xls.Name := 'Sheet1';
xla.Visible:=True;
Clipboard.Assign(Img.Picture);
xla.Cells(5,5).Select;
xls.PasteSpecial(5,False,False,False,0,EmptyParam,EmptyParam);
Img.Free;
end;
Версия Lazarus: 1.6.4
Версия FPC: 3.0.4
Я думаю, что все дело в том, что неправильно передаются параметры в PasteSpecial. Если у кого-нибудь есть рабочий вариант, поделитесь пожалуйста.
Почитай про библиотеку FpSpreadsheet. Она заточена как раз для взаимодействия с Excel.
Лично я выгрузку Image в Excel не делал, но всякое чтение/запись подкрашивание ячеек и прочее форматирование текста как-то надобилось.
Думаю, закинуть тебе в нужную ячейку изображение тоже не составит труда.
И Lazarus лучше обнови. 1.6.4 старый и много моментов в нем не совсем хорошо работает по сравнению с 2.0.10.
Cкидываю тебе рабочий вариант. Проверил на Excel 2010. Но, чтобы все работало нормально, тебе нужно:
1. установить в свой проект последнюю версию 1.12 Fpspreadsheet.
2. Как я устанавливал.
Распаковываешь fpspreadsheet-1.12 в директорию установленного Lazarus.
По умолчанию. C:\lazarus\components\fpspreadsheet .
Далее в запущенном своем проекте жмешь
Пакет -> Открыть файл пакета (.lpk) … выбираешь из C:\lazarus\components\fpspreadsheet поочередно файлы laz_fpspreadsheet.lpk laz_fpspreadsheet_visual.lpk и компелируешь добавляя в свой проект.
Ну а далее модуль проекту будет известен.
код на всякий случай:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes,SysUtils,Forms,Controls,Graphics,Dialogs,ExtCtrls,StdCtrls,
fpstypes,fpspreadsheet,fpsallformats,fpsutils,fpsPageLayout; // взаимодействие с Excel
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
MyWorkbook: TsWorkbook;
MyWorksheet: TsWorksheet;
filename_png: string;
filename_xls: string;
begin
MyWorkbook := TsWorkbook.Create;
filename_xls := 'D:\1\img_excel\name1.xlsx'; // путь к Excel 2010
filename_png := 'D:\1\img_excel\imagee.png'; // путь к изображению *.png
try
MyWorkbook.ReadFromFile(filename_xls); // место, где находится файл Excel 2010
MyWorksheet := MyWorkbook.GetFirstWorksheet; // рабочий лист 1(первый)
Image1.Picture.SaveToFile(filename_png); // сохраняем в нужную дерикторию изображение из Image1
MyWorksheet.WriteImage(1,3,filename_png,0.0,0.0,0.25,0.25); // *.png в 4 столбце 2 строке (0.0 - смещение точки привязки *.png от угла текущей ячейки, 0.25 иасштаб уменьшен в 1/4 раз)
MyWorkbook.WriteToFile(filename_xls, sfOOXML, True); // сохранение в файле Excel 2010
finally
MyWorkbook.Free;
end;
Close;
end;
end.
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)