Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизСнова Про 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c