Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизСохранить в Excel Найти похожие ветки
← →
YurikGl © (2004-03-04 17:22) [0]Вопрос тем, кто занимался работой с Excel. Кто-нибудь сохранял документ методом e1.ActiveWorkbook.SaveAs. Если да, то pls, напишите примерчик. Excel требует в разных параметрах переменные разного типа а EmptyParam не берет. Рассмотрение макроса через VB ничего не дало, т.к. он использует гораздо меньше параметров чем требует.
← →
Тимохов © (2004-03-04 17:23) [1]Какое связываение: позднее или раннее?
← →
YurikGl © (2004-03-04 17:24) [2]Работаю через TExcelApplication на вкладке серверов.
← →
Тимохов © (2004-03-04 17:27) [3]Это значит раннее.
Через раннее сам стараюсь не работать, а через позднее (т.е. через v: variant; v := CreateOleObject("Excel.Applicateoin");)
все просто - не надо указывать лишние праметры и все, т.е. типа
v.AcitveWorkBook.SaveAs(FileName := "bla-bla")
← →
YurikGl © (2004-03-04 17:28) [4]Раннее связывание работает с форматированием текста раз в 5 быстрее чем позднее. Не хотелось бы это терять. Видимо, придется.
← →
Тимохов © (2004-03-04 17:29) [5]
> YurikGl © (04.03.04 17:28) [4]
Что быстрее, это точно.
Зато позднее намного имхо беспроблемнее.
← →
TransparentGhost (2004-03-04 17:34) [6]A kak mozhno cherez ranneje? Rabotaju cherez pozdneje, no formatirovanije jachejek prohodit dovol"no dolgo, hotelos" bi pobistreje.
← →
jack128 © (2004-03-04 17:46) [7]полу off
> YurikGl © (04.03.04 17:28) [4]
Я так понимаю ту проблему с одновременным ранним и поздним ты не решил?
> с форматированием текста
А что ты тут конкретно делаешь? Может как то можно оптимизировать, тогда и на позднее можно перейти
← →
Тимохов © (2004-03-04 17:49) [8]Чтобы было зафигительно быстро - экспортируйте в XML. Работать правда будет > office 2000, зато 10000 тыс строк за 0.5 сек :)))))
← →
TransparentGhost (2004-03-04 17:52) [9]s takim zhe uspehom ja mogu sgenerit" RTF, zhal" tol"ko tam net formul
← →
Тимохов © (2004-03-04 17:54) [10]XML- это теперешний стандарт офиса. Они сами настоятельно соверуют именно так экспоритровать. Хорошо с этим знаком, т.к. у нас в наст. время один сотрудник этим занимается.
← →
YurikGl © (2004-03-04 18:13) [11]Re [7] Можно с одним еxсel и ранним и поздним связаться. Но если с ним есть позднее связывание, он начинает тормозить, даже если я даю ему комманду через переменную которая связана ранним связыванием.
Что-нибудь придумаю. Спасибо всем.
← →
YurikGl © (2004-03-04 18:15) [12]Квалификации мне не хватает даже на то, что-бы собственные мысли выразить, поэтому так непонятно.
← →
YurikGl © (2004-03-04 20:27) [13]Получилось
xl:OleVariant;
E1: TExcelApplication;
xl:=CreateOleObject("Excel.Application");
E1.Connect;
E1.Visible[0]:=true;
E1.Workbooks.Add(Null,1);
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:=capt;
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Select;
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Size:=12;
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Bold:=true;
E1.Range["A"+IntToStr(l),"D"+IntToStr(l)].Merge(EmptyParam);
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].HorizontalAlignment:=xlCenter;
....
E1.Range["A"+IntToStr(o-1),"D"+IntToStr(l-1)].Borders.Item[i].LineStyle:=xlContinuous;
xl.activeworkbook.SaveAs(FileName:=st);
E1.Disconnect;
← →
jack128 © (2004-03-04 20:34) [14]
> E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:=capt;
> E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Select;
> E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Size:=12;
> E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Bold:=true;
>
> E1.Range["A"+IntToStr(l),"D"+IntToStr(l)].Merge(EmptyParam);
> E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].HorizontalAlignment:=xlCenter
это в цикле? Лудше просто вставляй строку(если возможно) Или маркос напиши и запускай его из делфи, или шаблоны..
← →
YurikGl © (2004-03-04 20:52) [15]l - счетчик строки.
В программе вызываются несколько процедур. Каждая из них добавляет таблицу с заголовком. Таблицы формируется на основе запросов. l- глобальная переменная (в рамках TButtonClick).
Этот код - вырезка - формирование заголовка таблицы.
← →
jack128 © (2004-03-04 21:03) [16]А что мешает нарисовать зарание в Excel"е эти заголовки со всем необходимым форматированием,а из программы просто передовать данные??
← →
YurikGl © (2004-03-04 21:20) [17]Пользователь checkbox-ми выбирает какие таблицы экспортировать (до 11 таблиц). Это делает использвание "заготовок" весьма затруднительным.
При экспорте во Word я пользуюсь заготовками. Создаю шаблон a.do_ в котором есть объекты типа "надпись" в нужных мне местах. При вызове процедуры заполнения шаблон копируется в файл a.doc, запускается и все объекты типа "надпись" во всяких колотитулах заполняются нужными данными.
← →
jack128 © (2004-03-04 21:52) [18]я все равно, не понимаю. Ну создай одинадцать листов в книге, на каждом по шапке - и печатай те, которые нужно...
← →
YurikGl © (2004-03-04 21:59) [19]Дык пользователю нужно на одном листе. Я даже не понимаю зачем им это нужно. Сначала сказали:"Нужна спецификация аппаратуры, со всеми шапками, титульным листом, фамилиями утверждения и т.п." А потом, да сделай ты в произвольной форме в excel, но на одном листе.
Кстати, мне обещали слега помочь с этими проблемами. Если пользовать раннее связывание, частенько параметром преткновения является параметр lcid. Там можно указывать 0, но это не всегда проходит. Мне обещали дать строчку, что-то типа имени текущего юзера вытащенного из реестра, которую можно туды пихать, и excel будет это съедать и не ругаться :)
← →
jack128 © (2004-03-04 22:08) [20]
> частенько параметром преткновения является параметр lcid.
> Там можно указывать 0, но это не всегда проходит
Почитай вот эти статьи
http://www.delphikingdom.com/asp/excel.asp?ItemID=2&Count=10&pNo=2 там уделено внимание этому вопросу(помоему во 2-ой и 3-ей статье)
← →
YurikGl © (2004-03-04 22:12) [21]Спасибо, посмотрел. Осталось испытать :)
← →
evvcom (2004-03-05 01:10) [22]Даже на один лист результата все это можно собрать с нескольких листов шаблона. Так получится во-первых, гораздо проще, а во-вторых, при желании изменить стиль (размер, цвет шрифта, раскраску ячеек и т.д.) не потребуется вспоминать, что же я писал в этих исходниках, да хотя бы уже через месяц?
И еще. Где возможно, быстрее применять одинаковые операции сразу на группу ячеек, т.е.
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Select;
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Size:=12;
E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Bold:=true;
возможно проще записать как
MyVar := E1.Range["A"+IntToStr(l),"B"+IntToStr(l+10)];
MyVar.Select;
MyVar.Font.Size:=12;
MyVar.Font.Bold:=true;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.034 c