Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1079003717
3asys
2004-03-11 14:15
2004.03.28
Определение компонента, над которым находится курсор мыши.


11-1057512455
Ajax
2003-07-06 21:27
2004.03.28
Смена языка интерфейса


6-1074157742
Danilin
2004-01-15 12:09
2004.03.28
Определение IP по MAC


6-1073645802
vivk
2004-01-09 13:56
2004.03.28
Узнать IP клиента


14-1077906258
external
2004-02-27 21:24
2004.03.28
Логические диски





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский