Конференция "Основная" » Скопировать Chart из Excel в Image [D7, Win95/98, WinME, NT4, Win2k, WinXP]
 
  • yaric (21.05.08 09:47) [0]
    Необходимо забрать с листа график и отобразить на канве компонента TImage

    Пробую так возникает ошибка. Плиз подскажите что неправильно..


    var i:Integer;
       ch,sh : OleVariant;
    begin
     lcid:=0;
     lcid := GetUserDefaultLCId;
     fXL := TExcelApplication.Create(nil);
     try
       fXL.ConnectKind := ckNewInstance;
       fXl.Application.AutomationSecurity := 1;
       fXL.DisplayAlerts[lcid] := False;
       fXL.AutoQuit := False;
       fXL.Visible[lcid] := false;
       fXL.Connect;
       fxl.Workbooks.Add('c:\1.xls', lcid);

       ch:=(iDispatch(sh) as _Worksheet).ChartObjects('Chart. 1',lcid);  //ошИБКА
       (iDispatch(ch) as ChartObject).CopyPicture(xlscreen,xlbitmap);

       if Clipboard.HasFormat(CF_BITMAP)
       then Image1.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);

     except
       ShowMessage('Невозможно соединиться с MS Excel');
     end;

  • Palladin © (21.05.08 12:24) [1]
    эта ошибка, гласящая что она ошибка, наиболее распространенная ошибка в мире и решается очень легко

    (С)
  • Style © (21.05.08 12:45) [2]
    А кто Workbook, Worksheet объявлять будет???
    sh - вообще это что???

      ch:=(iDispatch(sh) as _Worksheet).ChartObjects('Chart. 1',lcid);  //ошИБКА



    к тому же метод не правильно используется в описании ChartObjects(Index, lcid) . т.е. первый параметр Index, а не Name

    короче вот так работает:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      fXL: TExcelApplication;
      Sheet: _Worksheet;
      Book: _Workbook;
      Chart: ChartObject;
      lcid: THandle;
    begin
    lcid := GetUserDefaultLCId;
    fXL := TExcelApplication.Create(nil);
    try
      fXL.ConnectKind := ckNewInstance;
      fXL.DisplayAlerts[lcid] := False;
      fXL.AutoQuit := False;
      fXL.Visible[lcid] := true;
      fXL.Connect;

      Book := fxl.Workbooks.Add('c:\1.xls', lcid);
      Sheet := (Book.ActiveSheet as _Worksheet);
      Chart := Sheet.ChartObjects(1,lcid) as ChartObject;
      Chart.CopyPicture(xlscreen,xlbitmap);

      if Clipboard.HasFormat(CF_BITMAP)
        then Image1.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);

    except
      ShowMessage('Превед медвед йа не икселъ');
    end;

    end;

 
Конференция "Основная" » Скопировать Chart из Excel в Image [D7, Win95/98, WinME, NT4, Win2k, WinXP]
Есть новые Нет новых   [134491   +8][b:0][p:0.002]