Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.047 c
1-1082001029
bear9
2004-04-15 07:50
2004.05.02
Список выделенных компонентов в Tlistview


6-1075475968
кондратий
2004-01-30 18:19
2004.05.02
INDY - атачменты...


3-1081260725
Alexey
2004-04-06 18:12
2004.05.02
Identity в базе SQLServer


4-1078684563
Volunteer
2004-03-07 21:36
2004.05.02
Как отслеживать нажатие клавиш из Win (XP) ?


3-1081108317
nika_ufc
2004-04-04 23:51
2004.05.02
Добрый вечер Мастера. Помогите c ADO и Oracle





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский