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


Автор: IllusDolphin 25.4.2004, 17:33
Пожалуйста, подскажите, как можно работать с экселем из Delphi, а то я пытался разобраться с компонентами , но у меня ничего не получилось. Нужно открыть приложение и записать в ячейки данные, а также получить данные из него...

Автор: NiJazz 25.4.2004, 17:51
На вкладке Servers в Delphi есть компонент ExcelApplication. С него и начни.

Автор: IllusDolphin 25.4.2004, 19:09
NiJazz, я нашёл этот компонент, но мне так и не удалось загрузить с его помощью эксель, а тум более брать из него данные sad.gif... Если можно небольшой примерчик?

Автор: NiJazz 25.4.2004, 19:29
Кину исходник работы с Word. Можешь от него отталкиваться. И не забывай, что есть F1. smile.gif
Код
unit UWord1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ExtCtrls, OleServer, Word97, Word2000;

type
 TForm1 = class(TForm)
   RGAlighn: TRadioGroup;
   RGFont: TRadioGroup;
   Memo1: TMemo;
   Edit1: TEdit;
   BInDoc: TButton;
   BPreview: TButton;
   BPrint: TButton;
   BSave: TButton;
   Image1: TImage;
   BNew: TButton;
   BOpen: TButton;
   BWord: TButton;
   procedure BWordClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure BNewClick(Sender: TObject);
   procedure BInDocClick(Sender: TObject);
   procedure BSaveClick(Sender: TObject);
   procedure BPrintClick(Sender: TObject);
   procedure BPreviewClick(Sender: TObject);
   procedure BOpenClick(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 WordApplication1: TWordApplication;
 WordDocument1: TWordDocument;
 WordFont1: TWordFont;
 WordParagraphFormat1: TWordParagraphFormat;

implementation

{$R *.DFM}

uses Clipbrd,OleCtrls{Word_97_SRVR};

procedure Connect;
{Проверка наличия открытого документа}
begin
 if WordApplication1.Documents.Count = 0
  then begin
   Application.MessageBox('В Word нет открытого документа',
                          'Команда не выполнена',
                          MB_OK + MB_ICONEXCLAMATION);
   Abort;
  end;
{Соединение WordDocument1 с активным документом}
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
{Делаются доступными кнопки работы с документом}
 Form1.BInDoc.Enabled:=true;
 Form1.BPreview.Enabled:=true;
 Form1.BPrint.Enabled:=true;
 Form1.BSave.Enabled:=true;
end;

procedure TForm1.BWordClick(Sender: TObject);
begin
{Word делается видимым}
WordApplication1.Visible:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WordApplication1 := TWordApplication.Create(self);
WordApplication1.ConnectKind := ckNewInstance;
WordApplication1.AutoQuit := true;
{Если при начале работы в Word нет ни одного открытого документа,
то кнопки работы с документом делаются недоступными}
if WordApplication1.Documents.Count = 0
then begin
 BInDoc.Enabled:=false;
 BPreview.Enabled:=false;
 BPrint.Enabled:=false;
 BSave.Enabled:=false;
end;
WordDocument1 := TWordDocument.Create(self);
WordFont1 := TWordFont.Create(self);
WordParagraphFormat1 := TWordParagraphFormat.Create(self);
end;

procedure TForm1.BNewClick(Sender: TObject);
begin
{Создание в Word нового документа}
if(StrToInt(Copy(WordApplication1.Version,0,Pos('.',WordApplication1.Version)-1)))
 < 9
// if (GetVersion >= $80000000)
then
//для Word 97
 (WordApplication1.Documents as Word97.Documents).Add(EmptyParam,EmptyParam)
else
//для Word 2000
 (WordApplication1.Documents as Word2000.Documents).Add(EmptyParam,EmptyParam,
                                                        EmptyParam,EmptyParam);
Connect;
end;

procedure TForm1.BInDocClick(Sender: TObject);
var Direction:OleVariant;
begin
{Занесение в документ информации}
Connect;
{Пересылка в документ изображения из Image1}
WordApplication1.Selection.InsertAfter(' ' + #13);
Clipboard.Assign(Image1.Picture);
WordApplication1.Selection.Paste;
WordApplication1.Selection.InsertAfter(' ' + #13);

{Снятие выделения}
Direction:=wdCollapseEnd;
WordApplication1.Selection.Collapse(Direction);

{Включение в документ текста заголовка}
WordApplication1.Selection.InsertAfter(' ' + #13);
WordApplication1.Selection.InsertAfter(
   'Уважаемый ' + Edit1.Text +' !'+ #13);
{Установка курсива и выравнивание заголовка по середине}
WordFont1.ConnectTo(WordApplication1.Selection.Font);
WordFont1.Italic := 1;
WordParagraphFormat1.ConnectTo(
                 WordApplication1.Selection.ParagraphFormat);
WordParagraphFormat1.Alignment := wdAlignParagraphCenter;
{Снятие выделения}
WordApplication1.Selection.Collapse(Direction);

WordApplication1.Selection.InsertAfter(' ' + #13);
WordApplication1.Selection.InsertAfter(Memo1.Text);
WordApplication1.Selection.InsertAfter(' ' + #13);

{Установка шрифта и выравнивание основного текста}
WordFont1.ConnectTo(WordApplication1.Selection.Font);
WordParagraphFormat1.ConnectTo(
                 WordApplication1.Selection.ParagraphFormat);
if RGFont.ItemIndex > 1
 then WordFont1.Bold := 1
 else WordFont1.Bold := 0;
if RGFont.ItemIndex mod 2 = 1
 then WordFont1.Italic := 1
 else WordFont1.Italic := 0;

 case RGAlighn.ItemIndex of
  0: WordParagraphFormat1.Alignment := wdAlignParagraphLeft;
  1: WordParagraphFormat1.Alignment := wdAlignParagraphRight;
  2: WordParagraphFormat1.Alignment := wdAlignParagraphCenter;
  3: WordParagraphFormat1.Alignment := wdAlignParagraphJustify;
 end;
{Снятие выделения}
WordApplication1.Selection.Collapse(Direction);
{Включение в документ текста заключительной строки}
WordApplication1.Selection.InsertAfter('С уважением');
{Установка курсива и выравнивание строки по середине}
WordFont1.ConnectTo(WordApplication1.Selection.Font);
WordFont1.Italic := 1;
WordParagraphFormat1.ConnectTo(
                 WordApplication1.Selection.ParagraphFormat);
WordParagraphFormat1.Alignment := wdAlignParagraphCenter;
{Снятие выделения}
WordApplication1.Selection.Collapse(Direction);
end;

procedure TForm1.BSaveClick(Sender: TObject);
var Dial: OleVariant;
begin
{Диалог открытия файла}
Connect;
Dial:=wdDialogFileSaveAs;
WordApplication1.Dialogs.Item(Dial).Show(EmptyParam);
end;

procedure TForm1.BPrintClick(Sender: TObject);
{Печать}
var Dial: OleVariant;
begin
Connect;
WordApplication1.Visible:=true;
Dial:=wdDialogFilePrint;
WordApplication1.Dialogs.Item(Dial).Show(EmptyParam);
end;

procedure TForm1.BPreviewClick(Sender: TObject);
begin
{Предварительный просмотр}
Connect;
WordDocument1.PrintPreview;
WordApplication1.Visible:=true;
end;

procedure TForm1.BOpenClick(Sender: TObject);
{Открытие файла}
var Dial: OleVariant;
begin
WordApplication1.Visible := true;
Dial:=wdDialogFileOpen;
if WordApplication1.Dialogs.Item(Dial).Show(EmptyParam) = -1
 then Connect;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
WordApplication1.Free;
WordDocument1.Free;
WordFont1.Free;
WordParagraphFormat1.Free;
end;

end.

Автор: Medved 26.4.2004, 01:35
А в первую очередь надо бы заглянуть в FAQ (Off-Line, On-Line). Немало копий поломано на этой теме...

Автор: Akella 26.4.2004, 08:21
Поищи на форуме, я недавно давао огромный пример работы с Excel.
Если не найдешь, то скажи, я опять выложу его сюда.

Автор: Illusion Dolphin 26.4.2004, 14:10
Всем большое спасибо, просто я тогда был не дома, поэтому были некоторые проблемы... Ответы нашёл в Off-Line FAQ...

Автор: L/// 6.5.2004, 13:15
Помогите пожалуйста.
Скопировал в Exl данные, пытаюсь их форматировать, а ничего не получается. Ячейки никак не изменяются - что делать?

Автор: Akella 6.5.2004, 14:45
Цитата
Помогите пожалуйста.
Скопировал в Exl данные, пытаюсь их форматировать, а ничего не получается. Ячейки никак не изменяются - что делать?


Каким образом ты пытаешься форматировать?
Опиши более подробно свои дейсвия и виложи сюда свой код.

Автор: Cашенька(ученица) 28.5.2004, 00:22

Подскажите!Какую функцию применять , чтобы в ячейке сумировались единичные буквы,находящиеся в др. ячейках.И чтобы если возле них нет точки,то при сумме возле каждой была точка.
Заранее благодарна!


Автор: Akella 28.5.2004, 08:07
Уважаемая Сашенька, чесно говря я не понял вопроса

Автор: Georg4 28.5.2004, 12:49
Опять Ексел!!!
А меня ещё тут осуждают что я выдавал несколько лишних раз статью о пользовании им!!!

Автор: Cашенька(ученица) 28.5.2004, 15:50
Еще раз пожалуста! У меня задача: в таблице,в первых трех ячейках пишется - фамилия,имя,отчество.При том вместо имени и отчества,могут быть записаны инициалы , а после них могут стоять точки , а могут и не стоять.
Надо зделать чтобы в 4-ой ячейке были собраны вместе фамилия имя и отчество или инициалы , а после инициалов в любом случае должна стоять точка.И четвертая ячейка должна автоматически копироваться на другом листе.( А еще может подскажете какой-нибудь сайт для тех кто учит ехсеl ).
Заранее благодарна!!!

Автор: Albinos_x 28.5.2004, 21:46
Смотри тему Excel, там я привожу пример smile.gif

Автор: Georg4 29.5.2004, 11:01
Вот именно. Давайте без велосипедов. Была уже куча инфы на форуме, просто нужно поиском как отцы и деды искали. Он у нас, слава Богу, работает хорошо.

Автор: Гость_Alik 12.7.2004, 12:42
Люди помогите!!! у меня два Excel фаила, один из которых содержит шаблон, необходимо данные из одного фаила вставить в шаблон, помогите плизз, очень надо!!!

Автор: klopol 12.7.2004, 12:49
у меня два Excel фаила, один из которых содержит шаблон. необходимо из другого фаила вставить данные в шаблон!!! помогите! буду презнателенsmile.gif

Автор: Guest 26.9.2004, 10:36
qstn.gif
Нужен экстерт.
Помогите изучить EXCEL
опсудим по тел 406-2816 Сергей с20.00-24.00

Автор: Cashey 26.9.2004, 10:59
Самое простое это считать данные из одного файла в массив, а из массива раскидать адресно в шаблон

Автор: devmstr 26.9.2004, 15:03
ExcelApplication1.WorkBooks.Add(Templete,1);

Templete - и есть твой шаблон

Автор: Serega 26.9.2004, 20:11

Господа!момогите советом
как написать формулу в EXCEL
например(на листе1 в ячейках а1:c1 прописаны цывры) в ячейке E1 должна стоять формула
чтобы отображалось на листе2
СПОСИБО

qstn.gif

Автор: Akella 22.10.2004, 08:56
Код
Row:=3;// строка 3
Col:=3// колонка 'c'
Edit1.Text:='=a1+b1';
Sheets.Cells[Row,Col]:=Edit1.Text;

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