Форум: "Основная";
Текущий архив: 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