I have a question here, I have an application and I need to add images to it. I have tried:
Sheet.Shapes.AddPicture(G_V.Prog_Dir+'pic.BMP',false,true, 190, 10+(15*rowcount), 100, 100 );
it works just fine, but I don’t want to give parameters, I want to insert pictures to specified (and parametric) cells because I need to add picture to the last column of the page; this excel needs to be printed I must mention that. So I tried:
Sheet.Range['E'+inttostr(rowcount),'E'+inttostr(rowcount)].Select;
Sheet.Pictures.Insert(G_V.Prog_Dir+'pic.BMP');
It looks OK at first sight, however I think this code links images to the sheet. For example, I send the created Excel to another computer and these images cannot be seen (I don’t recall the exact error) and when I searched it, I found out that receiving computer needs to have images at the exact path. As a solution to this, «Sheet.Shapes.AddPicture» recommended but
as I stated before, I need another solution here.
I didn’t see anybody experiencing this kind of problem, I hope someone helps me out.
Изображения в книге MS Excel представлены в виде объектов Excel.Shape (фигура). Эти объекты являются элементами коллекции Excel.Shapes (фигуры). Фигуры могут быть самые разные — картинки, загруженные из файла, диаграммы, автофигуры и пр. Каждая фигура по расположению привязана к той ячейке листа, на которой лежит её верхний левый угол. Границы фигуры могут не совпадать с границами строк и столбцов листа.
Извлечь все изображения из книги MS Excel и определить координаты ячеек, к которым они привязаны, можно следующим образом.
На форму надо положить:
Delphi | ||
|
Для кнопки Button1 создать обработчик события OnClick и оформить код следующим образом:
Delphi | ||
|
По нажатию на кнопку запустится диалог выбора файла. В нём надо выбрать интересующую рабочую книгу. Извлечённые данные программа запишет в папку «Export» — в той папке, где лежит исполняемый файл программы. Если этой папки нет, то программа создаст её. Все изображения представляются в формате Bitmap (*.BMP).
В Memo будут записаны сведения по обработанным фигурам. Пример:
Код
------------------------------ Файл рабочей книги: "C:ProjCyberXXXX-TestFilesКнига1.xls" ---------- Лист: "Лист1" Папка экспорта: "C:ProjCyberXXXX-TestExportКнига1.xlsЛист1" Количество фигур: 6 Фигура: "Picture 1" Координаты ячейки: Row = 3, Col = 3 Изображение сохранено в файл: "Picture 1.bmp" Фигура: "Picture 2" Координаты ячейки: Row = 3, Col = 6 Изображение сохранено в файл: "Picture 2.bmp" Фигура: "Picture 3" Координаты ячейки: Row = 3, Col = 9 Изображение сохранено в файл: "Picture 3.bmp" Фигура: "Picture 4" Координаты ячейки: Row = 3, Col = 12 Изображение сохранено в файл: "Picture 4.bmp" Фигура: "AutoShape 5" Координаты ячейки: Row = 10, Col = 2 Изображение сохранено в файл: "AutoShape 5.bmp" Фигура: "AutoShape 6" Координаты ячейки: Row = 12, Col = 4 Изображение сохранено в файл: "AutoShape 6.bmp" ---------- Лист: "Лист2" Папка экспорта: "C:ProjCyberXXXX-TestExportКнига1.xlsЛист2" Количество фигур: 0 ---------- Лист: "Лист3" Папка экспорта: "C:ProjCyberXXXX-TestExportКнига1.xlsЛист3" Количество фигур: 2 Фигура: "Рисунок 1" Координаты ячейки: Row = 4, Col = 4 Изображение сохранено в файл: "Рисунок 1.bmp" Фигура: "Рисунок 2" Координаты ячейки: Row = 10, Col = 8 Изображение сохранено в файл: "Рисунок 2.bmp"
—
Как разрабатывать программы для работы с MS Office.
0
← →
Ragazor
(2004-08-28 19:03)
[0]
сабж
← →
YurikGL ©
(2004-08-30 07:26)
[1]
Как вариант запустить Excel потом нужную картинку сделать select а потом copytoclipboard
← →
VMcL ©
(2004-08-30 10:17)
[2]
Как-то так, вроде:
ActiveSheet.Shapes(…).Select
Selection.Copy
← →
Ragazor
(2004-08-30 11:20)
[3]
хммм…
А если картинка не одна, тоесть типа нужно выбрать картинку с нужным названием и потом копировать.
← →
Ragazor
(2004-08-30 11:36)
[4]
ActiveSheet.Shapes(…).Select
такой синтаксис требует «member not found»
← →
YurikGL ©
(2004-08-31 10:45)
[5]
> Ragazor (30.08.04 11:36) [4]
Сделай макрос и посмотри его синтаксис
← →
Ragazor
(2004-09-03 12:18)
[6]
я сделал, там надо вписать типа имя картинки вида «Картинка1»
но в делфи так не проходит.
← →
YurikGL ©
(2004-09-03 13:35)
[7]
> Ragazor (03.09.04 12:18) [6]
А что делфи пишет?
На всякий случай попробуй
ActiveSheet.Shapes.item(«Картинка 1»).Select
На будущее, берешь компонент ExcelWorkSheet, нажимаешь ctrl+пробел и смотришь появившийся список, потом ExcelWorkSheet.Shapes и тоже Ctrl+пробел…. Много нового узнаешь.
← →
Ragazor
(2004-09-03 13:55)
[8]
а я прбовал
ActiveSheet.Shapes(«Картинка 1»).Select
← →
Ragazor
(2004-09-03 14:30)
[9]
form1.Worksheet.Shapes.Item(«Picture5»).Select(pic);
вроде так должно быть, PIc: OLEVARIANT
А как потом его скинуть в файл или, например, в Имейдж.
← →
YurikGL ©
(2004-09-03 15:27)
[10]
Как вариант — через буфер.
← →
Ragazor
(2004-09-05 13:54)
[11]
Excel.ActiveSheet.Shapes.Item(«Picture 5»).Select;
Excel.Selection.Copy;
Form1.Image1.Picture.Assign(Clipboard);
вот так работает 100%
Excel:olevariant
Update #4 The OP belatedly provided instructions to prepare an example of the picture he’s been trying to extract:
1) Go to nbbclubsites.nl/club/8000/uitslagen 2) Click on «TKDmm, ronde 1 [1]» 3) Click on -14- 13/3 4) Clik on «B.C. Den Dungen-1» 5) Select de 4 and hearts symbol 6) Copy Ctrl+C 7) Open Excel and select cell (1,1)
Past Ctrl+V In the cell you see 4 in the cell and the heart symbol locked left upper corner
I did this and the hearts symbol pasted into my worksheet without any problem. After doing that, the SavePicture
method in item 1 Insert Picture
correctly extracts and saves the hearts symbol to disk as a .Jpg file. Doh!
Update #3 A problem with answering this question has been that there is no
information about how the pictures in the OP’s spreadsheet have been inserted. So far,
three different methods have been identified namely:
- Using Insert — Picture from Excel’s Insert Tab
- Using Insert — Object from Excel’s Insert Tab
- Using Insert Comment from the selected cell’s context menu
Below I show code examples for each of these methods.
1. Insert — Picture
procedure TForm1.InsertPicture;
begin
Worksheet.Pictures.Insert('C:UsersmaPicturesphoto-2.JPG');
end;
procedure TForm1.SavePicture;
var
Picture : OleVariant;
begin
Picture := Worksheet.Pictures[1];
Picture.Select;
Picture.Copy;
SaveClipboard;
end;
2. Insert — Object
procedure TForm1.InsertAsObject;
begin
WorkSheet.OLEObjects.Add(Filename:='C:UsersmaPictureswall.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. Insert as cell comment
procedure TForm1.InsertCommentPicture;
var
Cell,
Comment : OleVariant;
begin
Cell := WorkSheet.Cells.Range['b2', 'b2'];
Comment := Cell.AddComment;
Comment.Shape.Fill.UserPicture('C:UsersmaPicturesphoto-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;
The SaveClipBoard method and FormCreate method are shown below. Excel
, WorkBook
and WorkSheet
are all OleVariant members of the form.
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;
Delphi Как Вставить Картинку в Excel
В данном обзоре рассмотрены основные конструкции, позволяющие получить доступ к книге Excel из DELPHI.
Организация доступа к книге EXCEL
Для взаимодействия с MS excel в программе необходимо использовать модуль ComObj
uses ComObj;
и объявить переменную для доступа к MS excel следующего типа:
var Excel: Variant;
Открытие существующей книги (где path — путь к фалу с расширением xls.):
Excel.Workbooks.Open[path];
Открытие существующей книги только для чтения:
Excel.Workbooks.Open[path, 0, True];
Блокировка запросов (подтвеждений, уведомлений) Excel, например, запретить запрос на сохранение файла:
Excel.DisplayAlerts:=False;
Отображаем Excel на экране:
Excel.Visible := True;
или скрываем:
Excel.Visible := False;
Печать содержимого активного листа excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных в EXCEL
Доступ к ячейке в текущей книге Excel можно осуществить следующим образом:
Excel.Range[‘B2′]:=’Привет!’;- для записи значения в ячейку или
s:=Excel.Range[‘B2’]; — для чтения,
где B2 — адрес ячейки.
Или используя стиль ссылок R1C1:
Excel.Range[excel.Cells[2, 2]]:=’Привет!’;, где [2, 2] — координата ячейки.
Вообще, ячейке Excel можно присваивать любое значение (символьное, целое, дробное, дата) при этом Excel установит форматирование в ячейке применяемое по умолчанию.
Формат ячеек в EXCEL
Выделить (выбрать) группу ячеек для последующей работы можно так:
Excel.Range[Excel.Cells[1, 1], Excel.Cells[5, 3]].Select;
или
Excel.Range[‘A1:C5’].Select;
при этом будет выделена область находящаяся между ячейкой A1 и C5.
Использование паролей в EXCEL
Вспомогательные операции в EXCEL
Удаление строк со сдвигом вверх:
Excel.Rows[‘5:15’].Select;
Excel.Selection.Delete;
при выполнении данных действий будут удалены строки с 5 по 15.
В данном обзоре рассмотрены основные конструкции, позволяющие получить доступ к книге Excel из DELPHI.
Организация доступа к книге EXCEL
Для взаимодействия с MS excel в программе необходимо использовать модуль ComObj
uses ComObj;
и объявить переменную для доступа к MS excel следующего типа:
var Excel: Variant;
Открытие существующей книги (где path — путь к фалу с расширением xls.):
Excel.Workbooks.Open[path];
Открытие существующей книги только для чтения:
Excel.Workbooks.Open[path, 0, True];
Блокировка запросов (подтвеждений, уведомлений) Excel, например, запретить запрос на сохранение файла:
Excel.DisplayAlerts:=False;
Отображаем Excel на экране:
Excel.Visible := True;
или скрываем:
Excel.Visible := False;
Печать содержимого активного листа excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных в EXCEL
Доступ к ячейке в текущей книге Excel можно осуществить следующим образом:
Excel.Range[‘B2′]:=’Привет!’;- для записи значения в ячейку или
s:=Excel.Range[‘B2’]; — для чтения,
где B2 — адрес ячейки.
Или используя стиль ссылок R1C1:
Excel.Range[excel.Cells[2, 2]]:=’Привет!’;, где [2, 2] — координата ячейки.
Вообще, ячейке Excel можно присваивать любое значение (символьное, целое, дробное, дата) при этом Excel установит форматирование в ячейке применяемое по умолчанию.
Формат ячеек в EXCEL
Выделить (выбрать) группу ячеек для последующей работы можно так:
Excel.Range[Excel.Cells[1, 1], Excel.Cells[5, 3]].Select;
или
Excel.Range[‘A1:C5’].Select;
при этом будет выделена область находящаяся между ячейкой A1 и C5.
Использование паролей в EXCEL
Вспомогательные операции в EXCEL
Удаление строк со сдвигом вверх:
Excel.Rows[‘5:15’].Select;
Excel.Selection.Delete;
при выполнении данных действий будут удалены строки с 5 по 15.
Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре
Как загрузить картинку в delphi
Как это победить – на настоящий момент – не знаю. Одинаковая картина – если отображать на DBImage и на Image. Причём, если PNG отображать на форме простой загрузкой файла (не через сохранение в БД и последующего чтения), то PNG отображается при этом нормально…
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
При необходимости вы можете использовать маркеры изменения размера по краям изображения, чтобы обрезать его до нужного размера. Если же вы хотите что-то уточнить, я с радостью помогу!
Привязать изображения к ячейке Переходим во вкладку производить никаких измененийВыделяем весь лист, нажатиемОдним из способов прикрепить Всё зависит от. картинку было хорошо углу) появляется значокКликаем в том месте, в любую сторону» на другом листе — изменить текст, «Рецензирование» в разделе А вот два.
Image в Delphi
Ну, вот я описал все способы как в Excel вставить картинку, я очень надеюсь, что мой материал вам помог. Буду признателен вашим лайкам и репосту в социальные сети, если статья вам понравилась, а ваши замечания жду в комментариях!
У меня есть вопрос, у меня есть приложение, и мне нужно добавить к нему изображения. Я пытался:
Sheet.Shapes.AddPicture(G_V.Prog_Dir+'pic.BMP',false,true, 190, 10+(15*rowcount), 100, 100 );
он работает нормально, но я не хочу давать параметры, я хочу вставлять изображения в указанные (и параметрические) ячейки, потому что мне нужно добавить изображение в последний столбец страницы; это превосходство должно быть напечатано, я должен упомянуть об этом. Поэтому я попробовал:
Sheet.Range['E'+inttostr(rowcount),'E'+inttostr(rowcount)].Select;
Sheet.Pictures.Insert(G_V.Prog_Dir+'pic.BMP');
С первого взгляда это выглядит нормально, однако я думаю, что этот код связывает изображения с листом. Например, я отправляю созданный Excel на другой компьютер, и эти изображения не могут быть замечены (я не помню точную ошибку), и когда я его обыскал, я узнал, что на компьютере-получателе должны быть изображения с точным путем. В качестве решения этого «Sheet.Shapes.AddPicture» рекомендуется, но, как я уже говорил, мне нужно другое решение.
Я не видел, чтобы кто-то испытывал подобные проблемы, я надеюсь, что кто-то поможет мне.
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Сегодня мы рассмотрим один из наиболее интересных, на мой взгляд, моментов работы с Excel в Delphi — построение диаграмм.
Забегая немного вперед, скажу, что есть несколько способов добавления диаграммы в рабочую книгу Excel. Чтобы все статьи по вопросам автоматизации Excel в блоге были как-то логически связаны, я решил сегодня рассмотреть способ добавления диаграммы через объект ChartObjects, с которым мы встречались, когда разбирали методы объекта WorkSheet.
План статьи:
- Копируем данные из таблицы и оформление StringGrid
- Добавление и редактирование диаграммы Excel
Итак, поставим перед собой цель — построить простой линейный график на основании данных таблицы (StringGrid) нашего приложения. При этом, чтобы продолжить предыдущую тему, постараемся скопировать таблицу на лист один-к-одному.
1. Копируем данные из таблицы и оформление StringGrid.
Для копирования данных из таблицы на лист Excel воспользуемся простейшей процедурой, которую мы уже с Вами рассматривали. Для наглядности, приведу листинг процедуры ещё раз:
procedure WriteTable(FirstCol, FirstRow:integer; Grid: TStringGrid); var col,row:integer; begin try for col := 0 to Grid.ColCount - 1 do for row := 0 to Grid.RowCount - 1 do MyExcel.ActiveWorkBook.ActiveSheet.Cells[FirstRow+row, FirstCol+col]:=Grid.Cells[col, row]; except raise Exception.Create('Запись таблицы завершилась ошибкой') end; end;
Теперь начнем копировать оформление. Во-первых, необходимо определить свойство BorderStyle у StringGrid — оно может быть либо bsSingle либо bsNone. В первом случае внешние границы таблицы будут выделяться. Отсюда следует, что и наша таблица в Excel должна иметь окантовку. Делается это просто:
... if Grid.BorderStyle=bsSingle then begin //отрисовываем внешние границы сплошной линией Range1.Borders[xlEdgeBottom].LineStyle:=xlContinuous; Range1.Borders[xlEdgeTop].LineStyle:=xlContinuous; Range1.Borders[xlEdgeLeft].LineStyle:=xlContinuous; Range1.Borders[xlEdgeRight].LineStyle:=xlContinuous; end; ...
Во-вторых, StringGrid может быть с отрисованными внутренними линиями и без них. За отрисовку внутренних линий отвечают два параметра из свойства Options у StringGrid: goFixedVertLine (прорисовка вертикальных линий в ) и goFixedHorzLine (прорисовка горизонтальных линий в StringGrid).
Проверяем наш StringGrid и, в случае необходимости, прорисовываем внутренние границы ячеек:
if goFixedVertLine in Grid.Options then Range1.Borders[xlInsideVertical].LineStyle:=xlSolid; if goFixedHorzLine in Grid.Options then Range1.Borders[xlInsideHorizontal].LineStyle:=xlContinuous;
А теперь самое интересное — определение цветов StringGrid и перенос их в таблицу Excel. Для того, чтобы перевести цвет в Delphi в цвет, приемлемый для Excel, напишем небольшую подпрограмму:
R := GetRValue(ColorToRGB(Color)); G := GetGValue(ColorToRGB(Color)); B := GetBValue(ColorToRGB(Color));
где Color — это любой из цветов в Delphi, например clRed или clBtnFace. В итоге мы получим три составляющих для RGB, который допускается использовать при заливке ячеек в Excel.
Теперь можно копировать цвета фиксированных ячеек StringGrid:
Cell1:=MyExcel.ActiveWorkBook.ActiveSheet.Cells[FirstRow, FirstCol]; Cell2:=MyExcel.ActiveWorkBook.ActiveSheet.Cells[FirstRow+Grid.RowCount-1, FirstCol+Grid.ColCount-1]; //выделяем занятую таблицей область листа Range1:=MyExcel.ActiveWorkBook.ActiveSheet.Range[Cell1, Cell2]; if Grid.FixedCols>0 then //есть фиксированные колонки for I:=1 to Grid.FixedCols do Range1.Columns[i].Interior.Color:=RGB(r,g,b); if Grid.FixedRows>0 then //есть фиксированные строки for I:=1 to Grid.FixedRows do Range1.Rows[i].Interior.Color:=RGB(r,g,b);
Таким образом мы скопировали наш StringGrid на лист Excel. Конечно, здесь есть свои недостатки, например StringGrid может быть раскрашен как новогодняя ёлка или иметь совершенно иное оформление, чем стандартное и тогда, следуя вышеперечисленным операциям Вы не добьетесь копирования оформления один-к-одному. Но, при небольшом дополнении исходного кода этого можно легко добиться — суть вопроса остается той же, как и набор операций работы Delphi с Excel.
2. Добавление и редактирование диаграммы Excel
Теперь, имея в своем распоряжении данные, можно приступать к построению диаграммы Excel с помощью Delphi.
Для того, чтобы добавить в коллекцию ChartObjects новый объект необходимо выполнить метод Add:
ChartObjects.Add(Left, Top, Width, Height)
где:
Left и Top — начальные координаты нового объекта (в пикселях), относительно левого верхнего угла ячейки A1 на листе или в левом верхнем углу графика.
Width и Height — соответственно ширина и высота новой диаграммы.
В результате выполнения метода в коллекцию ChartObjects добавляется новый объект. Пока никаких данных объект не использует. По сути в добавляется пустой холст диаграмм Excel.
Для того, чтобы построить диаграмму, необходимо:
- получить ссылку на объект Chart из коллекции ChartObjects;
- воспользоваться методом ChartWizard
Чтобы получить ссылку на вновь добавленный объект необходимо выполнить следующую операцию:
var Chart: OLEVariant; ChartCount: integer; begin ... ChartCount:=MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Count; Chart:=MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[ChartCount].Chart; ... end;
Метод ChartWizard содержит следующие параметры:
ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle)
Параметр | Тип | Описание |
Source | Variant | диапазон, который содержит исходные данные для нового графика |
Gallery | integer | (Enumerations xlChartType) — тип диаграммы. Для метода ChartWizard может принимать следующие значения: xlArea, xlBar, xlColumn, xlLine, xlPie, xlRadar, xlXYScatter, xlCombination, xl3DArea, xl3DBar, xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut, xlDefaultAutoFormat |
Format | integer | (1..10) — может быть числом от 1 до 10, в зависимости от типов галереи. Если этот аргумент опущен, Microsoft Excel выбирает значение по умолчанию в зависимости от типа диаграммы и источника данных. Например Format = 5 для нашего случая заставит Excel прорисовать на диаграмме линии сетки. |
PlotBy | определяет каким образом данные располагаются в Source. Может принимать два значения xlColumns = 2 (данные расположены в столбцах) xlRows = 1 (данные расположены в строках) | |
CategoryLabel | integer | определяет номер строки или столбца в пределах источника, содержащим метку категории. Допустимые значения от 0 (ноль) до предпоследнего номера столбца или строки источника |
SeriesLabels | integer | определяет номер строки или столбца в пределах источника, содержащим метку набора данных |
HasLegend | boolean | определяет будет ли на диаграмме Excel отражена легенда |
Title | string | заголовок диаграммы Excel |
CategoryTitle | string | подпись оси категорий |
ValueTitle | string | подпись оси значений |
ExtraTitle | string | дополнительная подпись оси при построении трехмерных графиков |
Как и для любых других методов Excel, в Delphi допускается опускать некоторые параметры или отмечать их как EmptyParam.
Теперь построим наш график. Для этого я написал небольшую процедуру:
procedure AddLineChartFromTable(X, Y, Height, Width, Format: integer; Title, XLabel,YLabel: string; DataGrid: TStringGrid; DataPosition: byte; ChartType:integer); var Chart: OLEVariant; DataRange: OLEVariant; begin //Вставляем данные из таблицы WriteTable(1, 1, DataGrid); //выбираем данные для диаграммы DataRange:=MyExcel.ActiveWorkBook.ActiveSheet.UsedRange; //добавляем новую диаграмму на активный лист MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Add(x,y,width,height); //выбираем последнюю добавленную диаграмму Chart:=MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Count]; Chart.Chart.ChartWizard(Source:=DataRange, Gallery:=xlLine, Format:=Format, PlotBy:=DataPosition, CategoryLabels:=1, SeriesLabels:=1, HasLegend:=true, Title:=Title, CategoryTitle:=XLabel, ValueTitle:=YLabel); end;
Как видите, все достаточно просто. Берется таблица StringGrid, данные из неё переносятся в Excel на активный лист и, затем, эти данные используются для построения графика. Причём первая ячейка таблицы используется для подписи рядов данных. В результате выполнения процедуры я получил следующую диаграмму Excel:
Ну, и наконец, для того, чтобы представить этот же график в объемном виде, воспользуемся одним из многочисленных свойств объекта Chart — ChartType:
Chart.ChartType:=xl3DLine;
в итоге получим следующий вид диаграммы:
На сегодня все В следующий раз займемся свойствами объекта Chart, научимся строить различные типы диаграмм и изменять область построения диаграммы. А пока можете поэкспериментировать с параметрами у ChartWizard и посмотреть какие ещё виды диаграмм Excel Вы сможете построить в Delphi.
Книжная полка
Название:Разработка приложений Microsoft Office 2007 в Delphi Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi. |
0
0
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.