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

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

Снова Про Excel [D5, Win2k]


Klerk ©   (2004-06-22 16:24:00) 

Вот получил список открытых имён файлов Excel:
ExcelApplication1.Connect;
try
if  ExcelApplication1.Workbooks.Count=0 then
begin
Combobox1.items.add('Нет открытых.');
end
else
   for I := 1 to ExcelApplication1.Workbooks.Count do
  begin
    W := ExcelApplication1.Workbooks[I];
    S:=w.name;
    Combobox1.Items.Add(S);
  end;
finally
  ExcelApplication1.Disconnect;

Получил список:
1.xls
2.xls
...
А теперь хочу выбрать один из combobox'a и распечатать часть ячеек из первого листа. (все эти файлы находятся в одной директории - путь известен). Они уже все открыты - мне просто надо распечатать тот, который я выбрал.
Как мне подключиться к определённому файлу?


evvcom   (2004-06-23 16:35:00) [1]

Правильно. А я скопировал 4 строчки справки и 1 строчку из своего старого проекта. В принципе этого было достаточно, чтобы понять вопрошающему, чтоделать дальше. Единственной проблемой могло лишь быть непонимание английского языка.


YurikGL   (2004-06-23 16:19:00) [2]


> evvcom ©   (23.06.04 15:46) [18]

Я еще скажу, что этот код я в VB получил с помощью макроса, а потом чуть-чуть доделал.


evvcom   (2004-06-23 15:46:00) [3]


> НО, мне нужно не переоткрывать файл - тогда сообщение, что
> такой файл уже открыт. А именно использовать один из УЖЕ
> открытых файлов для печати.

Блин, поражаюсь умением игнорировать посты, в которых уже дан ответ на вопрос. Ключевую команду повторил YurikGL ©   (23.06.04 15:41) [16] Activate!


Klerk   (2004-06-23 15:45:00) [4]

Спасибо


YurikGL   (2004-06-23 15:41:00) [5]

vr:OleVariant;
begin
ExcelApplication1.Connect;
vr:='имя файла.xls';
ExcelApplication1.Windows.Item[vr].Activate;
ExcelApplication1.Disconnect;


Klerk   (2004-06-23 15:32:00) [6]

YurikGL ©   (23.06.04 15:12) [12]
С областью печати понятно - уже сделал, печатает.
НО, мне нужно не переоткрывать файл - тогда сообщение, что такой файл уже открыт. А именно использовать один из УЖЕ открытых файлов для печати.
Я определил их имена (моё первое сообщение).
Загрузил их в Comobox.
1.xls
2.xls
...
Теперь мне надо выбрать один из них (из Combobox'a) и использовать. (Файлы уже открыты).
Код из пункта 7 приводит к переоткрытию файла, чего мне не нужно. Как это правильнее реализовать.

+Как выглядит корректный код?


evvcom   (2004-06-23 15:22:00) [7]


> Блин, справки на компе нет - такая Delphi.

Здесь справка по VB для Excel нужна, а не Дельфовая.

Из справки по MVB:

This example activates the workbook Book1.xls.
Workbooks("BOOK1").Activate
This example opens the workbook Large.xls.
Workbooks.Open filename:="LARGE.XLS"

Если не хочешь перечислять все параметры по порядку, используя EmptyParam, можно передавать парметры по имени. В Delphi синтаксис такой:
ActiveSheet := Sheets.Add(After := Sheets.Item[Sheets.Count]);

Скопировал у себя из проекта без каких либо изменений, но суть видна.


YurikGL   (2004-06-23 15:12:00) [8]


> Klerk   (23.06.04 14:05) [7]

ИМХО не корректно.


YurikGL   (2004-06-23 15:12:00) [9]


> А теперь хочу выбрать один из combobox'a и распечатать часть
> ячеек из первого листа. (все эти файлы находятся в одной
> директории - путь известен). Они уже все открыты - мне просто
> надо распечатать тот, который я выбрал.
> Как мне подключиться к определённому файлу?

Тебе для этого нужно выбрать ту область, которую нужно напечатать, потом отправить ее на печать.


Klerk   (2004-06-23 14:46:00) [10]

Он может быть уже открыт (до запуска программы), а может открываться из самой программы.
Но из программы я использую ShellExecute.
При активации формы происходит заполнение combobox'a именами отрытых файлов Excel. При отрытии файла из пограммы - очищение и повторное заполнение combobox'a.


AlexG   (2004-06-23 14:41:00) [11]

Ты изначально открываешь файл, или он открывается пользователем отдельно от программы?


Klerk   (2004-06-23 14:24:00) [12]

Имелась ввиду корректность кода.
Но вот в чём незадача. Это приводит к переоткрытию файла.
А мне нужно подключиться к одному из уже открытых файлов.
Как это правильно реализовать.


AlexG   (2004-06-23 14:16:00) [13]

Оно работает - значит правильно. Главное, чтобы тебе удобно было потом редактировать свой код. Если не работает, то НЕ правильно. Логично?


Klerk   (2004-06-23 14:05:00) [14]

А так будет корректно/правильно?

var
ExcelSheet : Variant;
...
ExcelApplication1.connect;//Подключаюсь к Excel
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(ExcelPathSaves+'\'+combobox1.text, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0));// подключаюсь к нужному мне файлу
ExcelSheet:=ExcelApplication1.sheets['Лист2']; //Переключаюсь на лист 2
ExcelSheet.activate;

Так правильно?


AlexG   (2004-06-22 17:24:00) [15]

А почему не попробовать работать так: ExcelApplication1.Workbooks[I] ?
А там и Sheet, и Range...


Klerk   (2004-06-22 17:06:00) [16]

А может, если они все открыты можно просто сделать один из них активным?
ExcelApplication1.ActiveWorkbook.Name(ExcelPathSaves+'\'+combobox1.text);
Но если писать так, то выдает:[Error] Printing.pas(79): Missing operator or semicolon


Klerk   (2004-06-22 17:00:00) [17]

Шести хватит?
Не соглашается:(


AlexG   (2004-06-22 16:52:00) [18]

Так... Значит ты используешь типы, а не variant. Тогда вставляй слово EmptyParam пока ему не понравится...


Klerk   (2004-06-22 16:42:00) [19]

ExcelApplication1.Workbooks.Open(ExcelPathSaves+'\'+combobox1.text);
Как правильно? Пишет что мало параметров.
Блин, справки на компе нет - такая Delphi.


AlexG   (2004-06-22 16:28:00) [20]

Попробуй его открыть ( Open() ). Либо также как ты получил его имя.


Наверх

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