![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова Про 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() ). Либо также как ты получил его имя.