Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Excel + Delphi


Автор: chiffa 16.7.2007, 16:11
Всем привет. С Делфи работаю относительно недавно, но вот возникла необходимость подружить программку с Екселем. нашел в инете такой примерчик:

Код

Excel := CreateOleObject('Excel.Application');    //Инициализацию переменной Excel в простейшем случае
Excel.Workbooks.Open['1.xls', 0, True];
s:=Excel.Range['b2'];
Form2.Edit1.Text:=s;


впринципе все работает, но в документе много листов, как делаать переход между листами? Зарание спасибо smile

Автор: Rodman 16.7.2007, 16:30
ты http://forum.vingrad.ru/index.php?show_type=forum&showtopic=84634&unread=1&hl=excel был?

Автор: chiffa 16.7.2007, 17:09
пасиба. пытался там разобрать не очень понимаю с чего должен начинаться код.... как инициализировать ексель. Пишу 

Код

icid:=LOCALE_SYSTEM_DEFAULT;
ExcelApplication1.ConnectKind:=ckNewInstance;
ExcelApplication1.AutoQuit:=true;
// делаем видимым Excel
ExcelApplication1.Visible[icid]:=true;
ExcelApplication1.AutoConnect:=true;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,icid));
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.ActiveSheet as ExcelWorkSheet);



[Pascal Error] Unit2.pas(52): E2003 Undeclared identifier: 'ckNewInstance'
[Pascal Error] Unit2.pas(53): E2066 Missing operator or semicolon
[Pascal Error] Unit2.pas(55): E2066 Missing operator or semicolon
[Pascal Error] Unit2.pas(55): E2016 Array type required
[Pascal Error] Unit2.pas(56): E2066 Missing operator or semicolon
[Pascal Error] Unit2.pas(57): E2003 Undeclared identifier: 'ExcelWorkbook1'

Автор: chiffa 17.7.2007, 09:07
и непонятно как переходить по страницам....

Автор: Rodman 17.7.2007, 09:26
Цитата(chiffa @  16.7.2007,  16:09 Найти цитируемый пост)
как инициализировать ексель

из DRKB
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData  : Variant;
   TemplateFile : String;
   BeginCol, BeginRow, i, j : integer;
   RowCount, ColCount : integer;
begin
BeginCol := 1;
BeginRow := 5;
RowCount := 100;
ColCount := 50;
 
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Application.EnableEvents := false;
Workbook := ExcelApp.WorkBooks.Add;
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
for I := 1 to RowCount do
   for J := 1 to ColCount do
     ArrayData[I, J] := J * 10 + I;
Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + RowCount - 1, BeginCol +
ColCount - 1];
Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
Range.Value := ArrayData;
ExcelApp.Visible := true;
end;

end.

Цитата(chiffa @  17.7.2007,  08:07 Найти цитируемый пост)
и непонятно как переходить по страницам.... 

надо через свойство Active - как найду выложу!

Автор: chiffa 17.7.2007, 10:50
огромное спасибо! а как можно получить количество листов в документе?

Автор: Rodman 17.7.2007, 11:30
Цитата(chiffa @  17.7.2007,  09:50 Найти цитируемый пост)
как можно получить количество листов в документе? 

ну ты можешь просто проверять на активность, т.е. если нельзя установить активноть - лист не существует!

http://citforum.ru/programming/windows/excel_faq/part2.shtml

Автор: chiffa 17.7.2007, 11:53
еще раз спасибо! буду читать!

Добавлено через 9 минут и 19 секунд
пытаюсь добавить новую книгу как описано в той ссылке что ты дал 

Код

XL.Workbooks.Add('1.xls', lcid);


выдает ошибку:

[Pascal Error] Unit2.pas(69): E2003 Undeclared identifier: 'XL'

Автор: chiffa 17.7.2007, 15:20
Перехожу по листам таким образом (надо выделить ячейки)
Код

Excel.WorkSheets[2].Range['C8'].Select;


если делаю 
Код

Excel.WorkSheets[3].Range['C8'].Select;


выдает: Project Project1.exe raised exception class EoleException with message "Медот Select из класса Range завершен неверно". лист присутствует 100%

Автор: Rodman 17.7.2007, 16:12
Цитата(chiffa @  17.7.2007,  10:53 Найти цитируемый пост)
[Pascal Error] Unit2.pas(69): E2003 Undeclared identifier: 'XL' 

ну блин - не обьявил!
Цитата(chiffa @  17.7.2007,  14:20 Найти цитируемый пост)
выдает: Project Project1.exe raised exception class EoleException with message "Медот Select из класса Range завершен неверно". лист присутствует 100%

ну порыскай.. я же говрю через Activate или Active надо делать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)