Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Снова Про Excel   Найти похожие ветки 

 
Klerk   (2004-06-22 16:24) [0]

Вот получил список открытых имён файлов 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 и распечатать часть ячеек из первого листа. (все эти файлы находятся в одной директории - путь известен). Они уже все открыты - мне просто надо распечатать тот, который я выбрал.
Как мне подключиться к определённому файлу?


 
AlexG ©   (2004-06-22 16:28) [1]

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


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

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


 
AlexG ©   (2004-06-22 16:52) [3]

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


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

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


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

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


 
AlexG ©   (2004-06-22 17:24) [6]

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


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

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

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-23 14:16) [8]

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


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

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


 
AlexG ©   (2004-06-23 14:41) [10]

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


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

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


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


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

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


 
YurikGL ©   (2004-06-23 15:12) [13]


> Klerk   (23.06.04 14:05) [7]

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


 
evvcom ©   (2004-06-23 15:22) [14]


> Блин, справки на компе нет - такая 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]);

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


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

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

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


 
YurikGL ©   (2004-06-23 15:41) [16]

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


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

Спасибо


 
evvcom ©   (2004-06-23 15:46) [18]


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

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


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


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

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


 
evvcom ©   (2004-06-23 16:35) [20]

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
1-1088425256
leonidus
2004-06-28 16:20
2004.07.11
Вопрос по компоненту TPageControl


6-1082387165
КАКТУСБЕЛ
2004-04-19 19:06
2004.07.11
ЭЛЕКТРОННАЯ ПОЧТА


6-1084424609
nkoleda
2004-05-13 09:03
2004.07.11
Вопрос по NMFTP


1-1087995689
MetalFan
2004-06-23 17:01
2004.07.11
Хранение данных в EXE...


10-1018423056
Олег Лаукарт
2002-04-10 11:17
2004.07.11
XML-D6-VisiBroker4.1