Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Excel   Найти похожие ветки 

 
Nekto   (2004-04-12 23:42) [0]

Всем привет! Вопрос для тех, кто занимался работой с MS Excel.
Работа с Excel как с COM Сервером через ExcelApplication

Код:
 Form1.ExcelApplication1.Connect;
   Прилипли к серверу.
 Form1.ExcelApplication1.Visible[0]:=true;
   Увидили!
 path:=CurrentDir; //функция
 path:=path+"\sample.xls";
 Form1.ExcelApplication1.Workbooks.Open(path,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam ,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);

 Открыли файл для работы
 Form1.ExcelApplication1.Cells.Item[10,"B"]:=10;
   Записали в ячейку B10 значение 10
 z:=Form1.ExcelApplication1.Cells.Item[1,1];
 for i:=1 to z do begin
   str:=Form1.ExcelApplication1.Cells.Item[3+i,3];
   Form1.ComboBox1.Items.Add(str);
 end;

   Всякая другая ерунда!
 Form1.ExcelApplication1.Disconnect;
   Отлипли.

  Как написано в разных умных книгах, COM-Server является объектом со своими свойствами, событиями, ....
  Т.е. чтобы с ним нормально работать надо знать его.

  Нет ли у кого инфы по работе с ним. Разбираться в куче процедур неизвестного происхождения - не фантан.
  А если кто уже сталкивался:
 Form1.ExcelApplication1.Cells.Item[10,"B"]:=10; добавляет в активный лист.
 Как менять листы? Как писать(читать) не активный лист? Как обращаться к ниму? Если открыть две раб.книги, как переходить между ними? И т.п. вопросы. Наверное надо юзать Icid, но как с ним работать, тоже разобраться?
  Дело осложняется отсутствием хелпа по нему, поэтому всем кто даст стоящую инфу ограмный "GUTTENMORG"!!!

P.S.
          Так же не будет лишней и инфа по WINWORD


 
Jack128 ©   (2004-04-13 00:05) [1]

Все это описано в хелпе к VBA, который поставляется вместе с Офисом..


 
Jack128 ©   (2004-04-13 00:06) [2]

Меню Сервис/Макросы/Редактор Visial Basic..


 
art-east   (2004-04-13 12:57) [3]

статьи "По волнам интеграции" на Королевстве дельфи


 
AleksandrKu   (2004-04-13 13:34) [4]

На сайте королевство делфи нарыл
Обьект EXCEL
  XLApp:= CreateOleObject("Excel.Application");

// Чтоб не задавал вопрос о сохранении документа
  XLApp.DisplayAlerts := false;

// Новый документ
  XLApp.Workbooks.Add;            // Активны три листа.
// XLApp.Workbooks.Add(-4167); // Активен один лист.
// или открываем шаблон.
// XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");

// Делаем его видимым
  XLApp.Visible:=true;
// Когда прога уже оттестирована лучше это делать в конце,
// быстрей работает

// Даём название страничке
  XLApp.Workbooks[1].WorkSheets[n].Name:="Прайс лист n";
// n - номер листа

// формат числа
for n := 3 to 10 do
  XLApp.WorkBooks[1].WorkSheets[1].Columns[n].NumberFormat := "0,00";
  XLApp.WorkBooks[1].WorkSheets[1].Columns[1].NumberFormat := "0";

// Таким способом можно задавать ширину колонки
  XLApp.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 8.5;
for i := 3 to 10 do
  XLApp.WorkBooks[1].WorkSheets[1].Columns[i].ColumnWidth := 10;

// Шрифт жирный
  XLApp.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True;
  XLApp.WorkBooks[1].WorkSheets[1].Rows[1].Font.Color := clBlack;
  XLApp.WorkBooks[1].WorkSheets[1].Rows[1].Font.Size := 16;
  XLApp.WorkBooks[1].WorkSheets[1].Rows[1].Font.Name := "Times New Roman";
  XLApp.WorkBooks[1].WorkSheets[1].Cells[1,3] := "Прайс лист";

// Обьединяем ячейки
   XLApp.WorkBooks[1].WorkSheets[1].Range["A1:D1"].Merge;

// Выравнивам по центру по вертикали
   XLApp.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := 2;

// Выравнивам по центру по горизонтали
   XLApp.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := 3;

// Выравнивам по левому краю
   XLApp.WorkBooks[1].WorkSheets[1].Cells[3,2].HorizontalAlignment := 2;

// Выравнивам по правому краю
   XLApp.WorkBooks[1].WorkSheets[1].Cells[3,4].HorizontalAlignment := 4;

// обрисовка диапазона ячеек
// Borders[1] .... [4] - это края ячейки
// Colorindex -4142 - пустой цвет, i и n - переменные
n:=1; // Кол. ячеек по ширене начиная с колонки А зак. С+n
i:=3; // Строчка

   XLApp.WorkBooks[1].WorkSheets[1].Range
       ["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)]

{...}.Borders.LineStyle := 1;
{...}.Borders.Weight := 3;
{...}.Borders[4].Colorindex := 3;
{...}.Borders[1].Colorindex := -4142;
{...}.Borders[2].Colorindex := -4142;
{...}.Borders[3].Colorindex := 44;

// присвоение ячейке значения
   XLApp.WorkBooks[1].WorkSheets[1].Cells[6,4] := "К-во";

// Поворачивать слова, писать вертикально, под углом и т.д.
   XLApp.WorkBooks[1].WorkSheets[1].Rows[10].Orientation := 15;
   XLApp.WorkBooks[1].WorkSheets[1].Rows[11].Orientation := 90;
   XLApp.WorkBooks[1].WorkSheets[1].Range["A11:B11"].Orientation := 0;


 
Nekto   (2004-04-13 18:16) [5]

Все конечно это так, но TExcelApplication и CreateOleObject("Excel.Application") разные вещи.
TExcelApplication формирует свои функции, которыми работает с OLE. Формируя OLE объект мы работаем с ним непосредственно, т.е. действительно в этом случае надо смотреть справку VBA и затем править код на Дельфу.
Используя TExcelApplication мы не межем выполнить, скажем
XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");
Для этого используется:
 Form1.ExcelApplication1.Workbooks.Open(CurrentDir+"\sample.xls",EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP aram,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid);

Хотелось бы инфу о TExcelApplication


 
Nekto   (2004-04-13 18:17) [6]

Все конечно это так, но TExcelApplication и CreateOleObject("Excel.Application") разные вещи.
TExcelApplication формирует свои функции, которыми работает с OLE. Формируя OLE объект мы работаем с ним непосредственно, т.е. действительно в этом случае надо смотреть справку VBA и затем править код на Дельфу.
Используя TExcelApplication мы не межем выполнить, скажем
XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");
Для этого используется:
 Form1.ExcelApplication1.Workbooks.Open(CurrentDir+"\sample.xls",EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP aram,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid);

Хотелось бы инфу о TExcelApplication


 
Nekto   (2004-04-13 18:17) [7]

Все конечно это так, но TExcelApplication и CreateOleObject("Excel.Application") разные вещи.
TExcelApplication формирует свои функции, которыми работает с OLE. Формируя OLE объект мы работаем с ним непосредственно, т.е. действительно в этом случае надо смотреть справку VBA и затем править код на Дельфу.
Используя TExcelApplication мы не межем выполнить, скажем
XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");
Для этого используется:
 Form1.ExcelApplication1.Workbooks.Open(CurrentDir+"\sample.xls",EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP aram,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid);

Хотелось бы инфу о TExcelApplication


 
Nekto   (2004-04-13 18:18) [8]

Все конечно это так, но TExcelApplication и CreateOleObject("Excel.Application") разные вещи.
TExcelApplication формирует свои функции, которыми работает с OLE. Формируя OLE объект мы работаем с ним непосредственно, т.е. действительно в этом случае надо смотреть справку VBA и затем править код на Дельфу.
Используя TExcelApplication мы не межем выполнить, скажем
XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");
Для этого используется:
 Form1.ExcelApplication1.Workbooks.Open(CurrentDir+"\sample.xls",EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP aram,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid);

Хотелось бы инфу о TExcelApplication


 
boris25   (2004-04-13 19:40) [9]

Попробуй Nekto .  У меня работает в win2000.
procedure TForm1.N4Click(Sender: TObject);
const vid=17; xim=21; mog=24; kli=27; stu=31; dom=34; sche=37;nar=42;
     ego = 47; los =49 ;push=51; odi=53 ;mos=58;
var myr,v :OleVariant; sql,x,y ,beg_scl:string;  i,b_y :integer;
begin
     // открыть  документ  excel
     with ExcelApplication1 do
     begin
     ExcelWorkbook1 := Workbooks.add( "D:\delphi_b\delpi_prod\200_ZAM_GL_BUX\пост01.xls" , LOcale_System_default);            
     ExcelWorkbook1 :=  Workbooks[1];
     ExcelWorkbook1.Activate(LOcale_System_default);
     ExcelWorkSheet1:=  ExcelWorkbook1.WorkSheets[1] as   ExcelWorkSheet;
     ExcelWorkSheet1.Activate(LOcale_System_default); // "это работает
      //--------------------------------приход
   sql := " SELECT  PR_kg  from zam_glb_3  ";
   db1.query1.SQL.Text := sql;
   db1.query1.open;
   for i:=1 to 5   do
    begin
    v:= db1.query1.fieldbyname("pr_kg").AsFloat ;
    myr:= ExcelWorkSheet1.range["b"+inttostr(3+i),EmptyParam];
    myr.value :=v;
    db1.Query1.Next ;
    end;
     db1.query1.Close;
      //-------------------------------дата  отчета
         myr:= ExcelWorkSheet1.range["a1",EmptyParam];  
         v:=myr.value+" "+str_month(glob_date)+" ";
         myr.value :=v;

================================
перед этим в  при создании формы сделал
procedure TForm1.FormCreate(Sender: TObject);

begin
   ExcelApplication1 := TExcelApplication.Create(self) ;
   ExcelApplication1.ConnectKind :=ckNewInstance;
//   ExcelApplication1.AutoQuit :=true;
   ExcelApplication1.Visible[Locale_user_default] := true;
end;

============================
обявления  в начале проги
     EXCELAPPLICATION1 :TEXCELAPPLICATION ;
     ExcelWorkSheet1:  ExcelWorkSheet;
     ExcelWorkbook1  : ExcelWorkbook;



 
Nekto   (2004-04-13 21:01) [10]

Извеняюсь за топик: глюки прокси


 
Jack128 ©   (2004-04-13 21:10) [11]


> Используя TExcelApplication мы не межем выполнить, скажем
> XLApp.WorkBooks.Open(MyDir + "\Шаблон.xls");
> Для этого используется:
>  Form1.ExcelApplication1.Workbooks.Open(CurrentDir+"\sample.xls",EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP
> aram,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid);
>
> Хотелось бы инфу о TExcelApplication
И что? просто вместо не нужных параметром встовляй ЕmptyParam ...


 
Nekto   (2004-04-14 03:29) [12]

> To Jack128
Я это и делаю!!!
Но функции которые описал AleksanderKu отличны от TExcelApplication.
(Кстати, функции VBA и TExcelApplication тоже отличаются)

> To boris25
Завтра обязательно попробую, сегодня уже влом.


 
Boris25   (2004-04-14 13:18) [13]

Nekto!
Я переключаюсь по страницам  таким образом.

    ExcelWorkSheet1:=  ExcelWorkbook1.WorkSheets["integer"] as   ExcelWorkSheet;
    ExcelWorkSheet1.Activate(LOcale_System_default); // "это работает


 
Bel ©   (2004-04-14 14:27) [14]

> функции VBA и TExcelApplication тоже отличаются

Они отличаются незначительно. В основном, это добавление параметра LCID. А в остальном, имена и параметры методов TExcelApplication дублируют соответствующие из VBA. Просто некоторые параметры можно пропускать, тогда вместо них будут использованы значения по умолчанию.


 
Nekto   (2004-04-14 16:16) [15]

> To bel
 Да, но от этого я и просил инфу по TExcelApplication. Тяжко разбираться в этих отличиях, которых на самом деле не так уж и мало. Да они дублируются из VBA, но не все.

> To Boris25
 На сколько я понял ExcelWorkSheet1 с закладки Service!?
 Сейчас сделею, должно работать.

 TExcelWorkSheet содержит элементы управления ячейками??? В большей степени интересует именно это.
Есть инфа вроде (AleksandrKu   (13.04.04 13:34) [4]), но для TExcelApplication или TExcelWorkSheet?


 
Boris25   (2004-04-14 17:47) [16]

Привет Nekto!
Читай текст 1 -го сообщения. Там я  создаю сервер программно --

  ExcelApplication1 := TExcelApplication.Create(self) ;
  ExcelApplication1.ConnectKind :=ckNewInstance;
//   ExcelApplication1.AutoQuit :=true;

  ExcelApplication1.AutoQuit -автомат. выход я думаю сделать теперь true
Вообще-то можеть быть лучше было бы  на форму поместить компонент TExcelApplication с закладки Service как вы и хотите и в начале задать его свойства.Но я сделал иначе.

Для работы пользовалься  книгой А.Я. Архангельского"Приемы программирования в Delphi (версии 5-7)" М.ООО"Бином-Пресс" .2003г


 
IXT ©   (2004-04-17 13:03) [17]

Nekto = IXT (Кто-то зарегистрировался под логином "Nekto"

Умная книжка!!!

    ExcelWorkSheet1:  ExcelWorkSheet;
    ExcelWorkbook1  : ExcelWorkbook;


TExcelWorkSheet(service) и ExcelWorkSheet разные типы!!! Как их совместить

Больше интересует работа (форматирование) с ячейками. В умной книжке не написано??:



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.026 c
14-1081370659
ИМХО
2004-04-08 00:44
2004.05.02
Депортиво - Милан 4:0


1-1082030354
Паша5
2004-04-15 15:59
2004.05.02
Компонент на формах


6-1079072036
Ricko
2004-03-12 09:13
2004.05.02
Автоматическая настройка прокси сервера


1-1081879073
ZyXEL
2004-04-13 21:57
2004.05.02
Как избавиться от скроллинга у WebBrowser?


1-1081938543
V-Isa
2004-04-14 14:29
2004.05.02
Запретить закрытие формы.