Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавить новый лист в EXCEL [D3]


Fishka ©   (2002-09-30 12:06:00) 

Проверяю, запущено или нет приложение EXCEL. Если нет, то пишу так:
MSExcel := CreateOleObject("Excel.Application");
Если запущено, то необходимо добавить лист.Макрос выглядит так:
Sheets.Add
Все, что пробовалось мною, при запуске вылетело с ошибкой.
А как нужно написать в программе? Как обратиться к переменной MSEXCEL типа Variant?


3JIA9I CyKA   (2002-10-01 16:51:00) [1]

Ку

var ws : variant;
...
ws := MSExcel.Workbooks[count_books].Sheets.Add;
ws.Cells[1,1].Value := "жОпА";


Fishka   (2002-10-01 16:40:00) [2]

>3JIA9I CyKA © (01.10.02 16:34)
Я вообще-то не про название говорю, а о том, почему всегда заполняются ячейки одного и того же листа, а не последнего добавленного.


3JIA9I CyKA   (2002-10-01 16:34:00) [3]

2Fishka
Называться он может хоть "ЖоПа".


max2057   (2002-10-01 16:28:00) [4]

function PrepareExcel(ListName :string): boolean;
begin
result := true ;
try
try
Excel:= GetActiveOleObject("Excel.Application");
except
try
Excel := CreateOleObject("Excel.Application");
except
ShowMessage("


Fishka   (2002-10-01 16:20:00) [5]

>3JIA9I CyKA © (01.10.02 12:43)
Спасибо.
Но чего-то я не догоняю.
Пишу так:
MsExcel := GetActiveOleObject("Excel.Application");
count_books:=MSExcel.Workbooks.Count;
MSExcel.Workbooks[count_books].Sheets.Add;
count_sheets:=MSExcel.WorkSheets.Count;
MSExcel.Workbooks[count_books].WorkSheets[count_sheets].Select;

И далее заполняю ячейки. Новый лист в книгу добавляется, но почему-то всегдазаполняются ячейки 3-го листа, хотя последний добавленный лист в книге называется "лист6".
В чем мои ошибки?


3JIA9I CyKA   (2002-10-01 12:43:00) [6]

У коллекций Workbooks и Worksheets есть Count.
У Workbook и Worksheet есть Name.
Этого мало?


Fishka   (2002-10-01 12:20:00) [7]

А поподробнее можно? Пожалуйста.


3JIA9I CyKA   (2002-10-01 11:30:00) [8]

Найди все. Выбери по названию.
Ку?


Fishka   (2002-10-01 09:46:00) [9]

>Prooksius © (30.09.02 16:04)
Спасибо за GetActiveOleObject.

Мне, наверное, нужен номер книги и номер листа (i,j), чтобы добавить в книгу с номером i новый лист, который будет иметь номер j. (Для новой книги i=1, j=1).

MSExcel.Workbooks[i].Sheets.Add;
MSExcel.Workbooks[i].WorkSheets[j].Select;


Как найти i,j? Или это вообще все делается по-другому?


Prooksius   (2002-09-30 16:04:00) [10]

Нечто наподобие с Word-ом:

var
MsWord: Variant;
...
try
// Если Word уже запущен
MsWord := GetActiveOleObject("Word.Application");
// Взять ссылку на запущенный OLE объект
except
try
// Word не запущен, запустить
MsWord := CreateOleObject("Word.Application");
// Создать ссылку на зарегистрированный OLE объект
MsWord.Visible := True;
except
ShowMessage("Не могу запустить Microsoft Word");
Exit;
end;
end;
end;


Fishka   (2002-09-30 15:54:00) [11]

>3JIA9I CyKA © (30.09.02 12:32)
var MSEXCEL, WB, WS : Variant;
begin
> MSEXCEL := CreateOleObject("Excel.Application");
Так я пишу, если EXCEL не запущен.
Но мне не нужен еще один EXCEL. Вопрос в том, как не создавая CreateOleObject, выполнить
MSEXCEL.Workbooks.Add;
а то программа при выполнении выдает на этой строке ошибку.


3JIA9I CyKA   (2002-09-30 12:32:00) [12]

Что типа этого. Проверять и не думал. Если сразу заработает, то это случайно.

var
MSEXCEL, WB, WS : Variant;
begin
MSEXCEL := CreateOleObject("Excel.Application");
WB := MSEXCEL.Workbooks.Add;
WS := WB.Worksheets[1];
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо