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

Вниз

Импорт в Excel.   Найти похожие ветки 

 
Behemoth ©   (2003-08-14 11:09) [0]

1. Приведенный ниже код работает медленно. Есть ли другие предложения?
2. После закрытия этой проги и Excel в памяти остается процесс Excel. Как мне его правильно уничтожить в программе

MSExcel:=CreateOleObject("Excel.Application");
MSExcel.WorkBooks.Add;
MSExcel.Sheets["Лист1"].Select;
Query1.First;
for i:=1 to Query1.RecordCount do
begin
for k:=0 to Query1.Fields.Count-1 do
MSExcel.ActiveSheet.Cells[i+1,k+1].value:=Query1.Fields[k].AsString;
Query1.Next;
end;


 
Vlad   (2003-08-14 11:20) [1]

Создавай массив типа вариант (VarArrayCreate), заполняй его значениями из датасета, а затем такой массив одним действием кладется на лист Excel, в определенный Range


 
Smithson ©   (2003-08-14 11:52) [2]

Либо сперва все данные упаковываешь в строковую перемнную (граница ячейки - ;, граница строки - #10#13), а потом через клипбоард помещаешь в эксель. Это еще быстрее, чем variants, но задать range не получится.


 
Spawn ©   (2003-08-14 11:53) [3]

2. Если ты имеешь ввиду, что тебе надо его закрыть, то
MSExcel.Quit;
MSExcel:=UnAssigned;


 
Oleg_   (2003-08-14 11:55) [4]

Я делал так же как Smithson только разделял границы ячеек #9.


 
Behemoth ©   (2003-08-14 12:55) [5]

Вот так не получается:

var Dataset1:Variant;
Rec:Array of variant;
Dataset1 := VarArrayCreate([0,Query1.RecordCount-1],varVariant);
SetLength(Rec, Query1.Fields.Count);
for i:=1 to Query1.RecordCount do
begin
for k:=0 to Query1.Fields.Count-1 do
Rec[k]:=Query1.Fields[k].AsString;
Dataset1[i-1] := VarArrayOf(Rec);
Query1.Next;
end;
MSExcel.Range["A2:H3"+IntToStr(Query1.RecordCount)].Value:=Dataset1;

Вроде массивы то заполняются, а данные не вставляются.

2. А как вы с клипбоардом работаете?
3. to Spawn: Я хочу чтобы после импорта моя программа была отдельно, а Excel отдельно. Сейчас, если закрыть прогу и потом закрыть Excel, в памяти остается процесс EXCEL.EXE. Сколько раз вызывался CreateOleObject стоко процессов и висит.


 
Alibaba ©   (2003-08-14 13:59) [6]

http://www.afalinasoft.com/rus/index.html


 
Behemoth ©   (2003-08-14 14:29) [7]

Всем спасибо. Всё сделал.
Только на всякий случай как поместить строки в Cliboard?


 
mma   (2003-08-14 16:07) [8]

Подскажите пожалуйста, как произвести ту же операцию импорта только для StringGrid? Проблема в следущем:
после экспорта в Excel поля stringGrid в которых были только цифры в Excel видны как float.
Подскажите, пожалуйста, как от этого избавиться


 
dtm   (2003-08-14 16:13) [9]

Выставь этому столбцу формат "@" - тогда вроде будет как строковый


 
Карелин Артем ©   (2003-08-14 16:49) [10]

Мои замечания:
1. Query1.RecordCount не всегда равно реальному числу записей. Это число прочитанных записей. Лучше делать цикл while not query1.eof do....
2. Не всегда пользователям нравится замусоривание буфера. Можно сделать текстовых файл с разделителями и натравить на него ексель.


 
mma   (2003-08-15 05:35) [11]

отвечу сам себе, нужно к строке добавить #39
тогда все будет в порядке


 
Spawn ©   (2003-08-15 06:43) [12]

Behemoth ©
В Clipboard можно поместить, если у соответствующих компонентов есть эти методы(например, у TMemo методом CopyToClipboard), ну если нету, то реализовать самому. А в Excel-е поищи методы работы с буфером обмена. Я точно не помню где они, но называться должны соответственно Cut, Copy, Paste - можешь посмортеть компонент TExcelApplication и посмортеть к какому обьекту относятся данные методы(я частенько так делаю, если не знаю где находится то или инное интересующее меня свойство).



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
3-81586
Lt
2003-07-29 13:08
2003.08.25
Посоветуйте событие для отработки процедуры


7-81970
Фагот
2003-06-09 19:59
2003.08.25
CD-ROM


1-81619
DoNotKnow
2003-08-12 23:39
2003.08.25
Активация приложения


14-81868
Man
2003-08-08 13:07
2003.08.25
неинициализация параметрами при >1 объекте данного класса


7-81988
_Raven
2003-06-08 18:38
2003.08.25
Модем