
Последние записи
- Форматирование таблиц в документе (Microsoft Office Word)
- Добавить текст на картинку JPEG
- Повторяющийся звук в Delphi
- Выгрузка TImage в Excel
- Где курсор
- Удалить повторы со сложением значений (Microsoft Office Excel)
- Bass регулировка по отдельности левого и правого каналов звука
- Как ускорить замену текста в MEMO?
- Вывод картинки (текстуры) на OpenGL 3.3 и Qt C++ с плавающем диапазоном координат по оси X
- Поиск ячеек определенного цвета (Microsoft Office Excel)

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.
Случайные статьи

пеллетные котлы

Пеллетный котел Emtas

Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)