Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2010, 18:15
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию Формирование диаграммы Excel из Delphi

Всем доброго дня Помогите пожалуйста со следующей задачей - по данным организации (отгрузки и оплаты) нужно сформировать диаграмму в екселе. БД в Sql server , структура таблицы с данными по отгрузкам и оплатам следующая:
Отгрузки | Оплаты | Дата_операции

По шкале x должна выводится дата операции но получается просто линия и цифры, т.е. дат там никаких не выводится. Во вложении выложил какая получается диаграмма. Подскажите пожалуйста в чем проблема может быть и как она решается.
Программный код как формируется диаграмма:
PHP код:
procedure TOtgruZki.BitBtn3Click(SenderTObject);
const
  
lcid LOCALE_USER_DEFAULT;
var
  
XLTExcelApplication;
  
WBTExcelWorkbook;
  
ASheetTExcelWorksheet;
  {
$ifdef D7}
  
LastCellExcelRange;
  {
$else}
  
LastCellRange;
  {
$endif}
  
AChart_Chart;
  
BTBookMark;
  
RCInteger;
  
repDataVariant;
begin
  XL 
:= TExcelApplication.Create(Self);
  
WB := TExcelWorkbook.Create(Self);
  
ASheet := TExcelWorksheet.Create(Self);
  try
    
XL.Connect;
    
WB.ConnectTo(XL.Workbooks.Add(EmptyParamlcid));
    
ASheet.ConnectTo(XL.ActiveSheet as ExcelWorksheet);
    
asheet.Columns.ColumnWidth:=20;
    
ASheet.Range['A1'EmptyParam].Value := 'Название';
    
ASheet.Range['B1'EmptyParam].Value := 'Отгрузки';
    
ASheet.Range['C1'EmptyParam].Value := 'Оплаты';
    
ASheet.Range['D1'EmptyParam].Value := 'Дата_операции';

    
:= 1;
    
with dm.OTGRUZ_Query3 do begin
      B 
:= GetBookmark;
      
DisableControls;
      
repData := VarArrayCreate([1RecordCount1Fields.Count-2], varVariant);
      try
        
First;
        
// чтение данных из датасэта в массив "вариант"
        
while not Eof do begin
          
for := 0 to Fields.Count do
            
repData[R1] := Fields[C].Value;
          
Inc(R);
          
Next;
        
end;
        
// запись данных в лист
        
ASheet.Range['A2'ASheet.Cells.Item[RecordCount 1Fields.Count-2]].Value := repData;
        
VarClear(repData);
      
finally
        
if Assigned(Bthen begin
          
if BookmarkValid(Bthen GoToBookmark(B);
          
FreeBookmark(B);
        
end;
        
EnableControls;
      
end;
    
end;
    
// последняя ячейка
    
LastCell := ASheet.Range['B2'EmptyParam].SpecialCells(xlCellTypeLastCellEmptyParam);
    
// постройка диаграммы в отдельном листе (по-умолчанию)
    
AChart := WB.DefaultInterface.Charts.Add(EmptyParamASheet.DefaultInterface,
      
1// кол-во диаграмм
      
EmptyParamlcid) as _Chart;
    
AChart.Name := 'Отчет'// имя листа диаграммы
    
AChart.ChartType := xlLineMarkers// тип диаграммы
    // задаем диапозон данных (можно все задать вручную)
    
AChart.SetSourceData(ASheet.Range['B1',
      
ASheet.Cells.Item[LastCell.RowLastCell.Column]], xlColumns);

    if 
Sender BitBtn3 then begin
      
// изменяем локацию и внедряем в наш лист!
      
AChart := AChart.Location(xlLocationAsObjectASheet.Name);
      
with ASheet.Shapes.Item((ASheet.ChartObjects as ChartObjects).Count) do begin
        Left 
:= ASheet.Range['B1:D1'EmptyParam].Width 5;
        
Top := 8;
        
Width := 700;
        
Height := 400;
      
end;
      
ASheet.Range['B1'EmptyParam].Select;
    
end;

    
// серии можно добавлять "вручную":
//    (AChart.SeriesCollection(EmptyParam, lcid) as SeriesCollection).NewSeries;
{    (AChart.SeriesCollection(EmptyParamlcid) as SeriesCollection)
      .
SourceOleVariantRowcolXlRowColSeriesLabelsOleVariant;
      
CategoryLabelsOleVariantReplaceOleVariant); }

    
with AChart do begin // украшательства диаграммы
      
HasTitle[lcid] := True;
      
ChartTitle[lcid].Characters[EmptyParamEmptyParam].Text := 'Отчет по отгрузкам/оплатам организации';
      
with (Axes(xlCategoryxlPrimarylcid) as Axis) do begin
        HasTitle 
:= True;
        
AxisTitle.Characters[EmptyParamEmptyParam].Text := 'Месяц';
      
end;
      (
Axes(xlValuexlPrimarylcid) as Axis).HasTitle := False;
      
with (Axes(xlCategoryxlPrimarylcid) as Axis) do begin
        HasMajorGridlines 
:= False;
        
HasMinorGridlines := True;
      
end;
      
with (Axes(xlValuexlPrimarylcid) as Axis) do begin
        HasMajorGridlines 
:= True;
        
HasMinorGridlines := False;
      
end;
      if 
Sender BitBtn4 then Deselect(lcid); // "отвыделим" диаграмму...
    
end;

    
// устанавливаем примочки для лейблов диаграммы
(*    AChart.ApplyDataLabels(
      {
Type_xlDataLabelsShowValue,
      {
LegendKeyFalse,
      {
AutoTextTrue,
      {
HasLeaderLinesTrue,
      
lcid); *)

    
// можно пробежаться по каждой серии...
(*    for := 1 to (AChart.SeriesCollection(EmptyParamlcid) as SeriesCollection).Count do ;
      (
AChart.SeriesCollection(ilcid) as Series).ApplyDataLabels(
      {
Type_xlDataLabelsShowNone,
      {
LegendKeyFalse,
      {
AutoTextTrue,
      {
HasLeaderLinesFalse); *)

           
// поменяем цвет линии и маркеров у первой серии
     
with (AChart.SeriesCollection(1lcid) as Series) do begin
       with Border 
do begin
         Color 
:= clBlue// синий
         
Weight := xlMedium;
       
end;
       
MarkerForegroundColor := clBlue;
       
MarkerBackgroundColor := clBlue;
       
MarkerStyle := xlSquare;
       
MarkerSize := 7;
     
end;
     
// у второй серии...
     
with (AChart.SeriesCollection(2lcid) as Series) do begin
       with Border 
do begin
         Color 
:= clGreen;
         
Weight := xlMedium;
         
LineStyle := xlDash;
       
end;
       
MarkerForegroundColor := clGreen;
       
MarkerBackgroundColor := clGreen;
       
MarkerStyle := xlSquare;
       
MarkerSize := 7;
     
end;

    
// убираем легенду

//    AChart.HasLegend[lcid] := False;

    
with AChart.PlotArea[lcid].Border do begin
      Weight 
:= xlHairline;
      
LineStyle := xlAutomatic;
    
end;
    
AChart.PlotArea[lcid].Interior.ColorIndex := xlAutomatic;

    if 
Sender BitBtn3 then begin
      XL
.ActiveWindow.Zoom := 90// 75%
      
XL.ActiveWindow.DisplayWorkbookTabs := False// спрячем ярлыки страниц
    
end;
  
finally
    FreeAndNil
(ASheet);
    
FreeAndNil(WB);
    
XL.Visible[lcid] := True;
    
FreeAndNil(XL);
  
end;


end
Изображения
Тип файла: jpg Снимок.JPG (57.5 Кбайт, 23 просмотров)

Последний раз редактировалось windaws, 23.01.2010 в 18:22.
Ответить с цитированием
  #2  
Старый 11.05.2010, 15:03
serjufa serjufa вне форума
Прохожий
 
Регистрация: 27.10.2005
Сообщения: 14
Репутация: 10
По умолчанию

уж коли так спокойно взял код г-на Шабля [http://www.delphikingdom.com/asp/vie...atalogid=1275], так и задай ему свой вопрос

PS сам парюсь с этим кодом
Ответить с цитированием
  #3  
Старый 11.05.2010, 17:38
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

решил проблему по другому, забил на эксель сделал диаграмму в программе с помощью tdbchart
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter