ПредишенСледващото

Там е източникът на проблема?

Имаме нужда от източник, който изнася съдържанието на DBgrid в Excel


> Evgen # XA0; (17.05.04 14:03) # XA0;

Тук не прекалено мързеливи, за да пиша за специалния код за вас:

тип
TMyDBGrid = клас (TDBGrid);
.
процедура ToExcel;
Var
# XA0; а, б: Integer;
# XA0; ExApp, WB, WS: Вариант;
започвам
# XA0; ExApp: = CreateOleObject ( "Excel.Application");
# XA0; WB: = ExApp.WorkBooks.Add;
# XA0; WS: = ExApp.Workbooks [1] .WorkSheets [1];
# XA0; с TMyDBGrid (DBGrid1) .DataLink направи
# XA0; започне
# XA0; # XA0; за: = 0 до (RecordCount-1) направи
# XA0; # XA0; започне
# XA0; # XA0; # XA0 продължение на б: = 0 до (FieldCount-1) направи
# XA0; # XA0; # XA0; започне
# XA0; # XA0; # XA0; # XA0; WS.Cells [а + 1, б + 1] .Value: = Полетата [Ь] .AsString;
# XA0; # XA0; # XA0; край;
# XA0; # XA0; край;
# XA0; # XA0; ExApp.Visible: = вярно;
# XA0; край;
приключи;

Тук съдържанието на DBGrid се свалят в работен лист на Excel
Но това е, което искаш?

Благодаря. Я да видя!

Той дава за грешка, подобно chegoto се лишите от следния вид:
[Грешка] Unit1.pas (32): Недекларираният идентификатор: "CreateOleObject"
в един ред:
ExApp: = CreateOleObject ( "Excel.Application");


> Evgen # XA0; (17/05/04 14:53) [8]

Съжаляваме, брат, забравих (горко ми е)
използва ComObj
:-)

Какво е това?
В ред, тип:
с TMyDBGrid (DBGrid1) .DataLink правя
грешка:
[Грешка] Unit1.pas (36): Недекларираният идентификатор: "TMyDBGrid"


> Evgen # XA0; (17/05/04 15:10) [10]
> Какво е това?

Това означава, че видите типа на тип не е декларирана
TMyDBGrid = клас (TDBGrid);
Прочетете внимателно [5] пост

# XA0; # XA0; TMyDBGrid = клас (TDBGrid);

тип
# XA0; TMyDBGrid = клас (TDBGrid);
# XA0; TForm1 = клас (TForm)
# XA0; Таблица 1: TTable;
# XA0; DataSource1: TDataSource;
# XA0; DBGrid1: TDBGrid;
# XA0; процедура ToExcel;
частен
# XA0;
обществен
# XA0;
приключи;

Да и какво направи!
единица Unit1;

употреби
# XA0; Windows, съобщения, SysUtils, варианти, Курсове, графики, управление, контролните форми,
# XA0; диалогови прозорци, решетки, DBGrids, DB, DBTables, ComObj;

тип
# XA0; TMyDBGrid = клас (TDBGrid);
# XA0; TForm1 = клас (TForm)
# XA0; Таблица 1: TTable;
# XA0; DataSource1: TDataSource;
# XA0; DBGrid1: TDBGrid;
# XA0; процедура ToExcel;
# XA0; частен
# XA0; # XA0;
# XA0; обществен
# XA0; # XA0;
# XA0; край;

Var
# XA0; Form1: TForm1;

процедура ToExcel;
Var
А, В: цяло число;
ExApp, WB, WS: Вариант;
започвам
ExApp: = CreateOleObject ( "Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = ExApp.Workbooks [1] .WorkSheets [1];
с TMyDBGrid (DBGrid1) .DataLink правя
започвам
# XA0; за: = 0 до (RecordCount-1) направи
# XA0; започвам
# XA0; # XA0; за б: = 0 до (FieldCount-1) направи
# XA0; # XA0; започвам
# XA0; # XA0; # XA0; WS.Cells [а + 1, б + 1] .Value: = Полетата [Ь] .AsString;
# XA0; # XA0; приключи;
# XA0; приключи;
# XA0; ExApp.Visible: = вярно;
приключи;
приключи;

> Влад
Докато СЕТО провали. По-късно ние продължаваме! Благодарим Ви!

В същия проблем като с Evgen трябва да експортирате данни от Grida Excel.
Опитах кодове на оферти, но това отнема само един запис (където се намира курсора) от мрежата толкова пъти, колкото видимите редове в таблицата.
Може разни - да ми помогне да се разбере.

с DbGrid1.DataSource.DataSet правя
започвам
# XA0; Миналата;
# XA0; Първи;
приключи;

> За: = 0 до (RecordCount-1) направи
> # XA0; започвам
> # XA0; # XA0; за б: = 0 до (FieldCount-1) направи
> # XA0; # XA0; започвам
> # XA0; # XA0; # XA0; WS.Cells [а + 1, б + 1]. Стойност: = Полетата [Ь] .AsString;
> # XA0; # XA0; приключи;
# XA0; # XA0; # XA0; DbGrid1.DataSource.DataSet.Next; # XA0;
> # XA0; приключи;
> # XA0;
подчертани от низ - правилният начин за спирачките, колкото е необходимо, за да видите линка по-горе ..

> Аз се опитах да предложи код, но това отнема само един запис (в
> Къде се намира курсора) от мрежата толкова пъти, колкото се вижда
> редове в Таблицата
видя моята добавка към кода ..

Тъй като все пак без проблеми за сваляне от мрежата в Excel?


> iVovs # XA0; (22/05/04 14:10) [17]

Съжалявам, грешката се е промъкнал в,
.
с TMyDBGrid (DBGrid1) .DataLink правя
започвам
# XA0; за: = 0 до (RecordCount-1) направи
# XA0; започне
# XA0; # XA0; ActiveRecord: = а; // Забравих да добавите този ред
# XA0; # XA0 продължение на б: = 0 до (FieldCount-1) направи
# XA0; # XA0; започне
.


> Необходимост изнася DBGrid, а не от набора от данни, според изявлението
> Вашият отговор на въпрос грешна по принцип
ъ-ъ-e..Nu тогава настройката може да се счита за невалиден, защото в DbGrid "съдържание на колоните с изключение на името, всички други данни prenadlezhat DataSet" у.

Ето защо, И аз съжалявам, но това, което е въпросът - е отговорът.

Да, не се спори по делото.
И това е още един пример за това как работно време, само когато е налице запис чрез набора от данни на Excel - можете да гледате на процеса на DB режа.


> iVovs # XA0; (22/05/04 15:17) [24]


> Има запис в Excel - можете да гледате на процеса на DB
> Стъргане.

DataSet.DisableControls
DataSet.EnableControls

По дяволите, се сблъскват с друг проблем:

Имам DBGrid-ите са на различни страници (PageControl), и по-специално - на самия "възможност" за износ в Excel. Така че тази възможност или чудо бутон работи правилно с масата (т.е. изнася всички записи), на страницата, която е била активна, преди да отидете на страницата с този бутон. Ако експортирате от друг DBGrid-добре, това се появява само една линия. Какво да се прави?

Влад използвана опция а.

О, и как да се изнася всичко, което dolhno бъде DBGrid-е, и че по този начин може да донесе толкова редове, както може да се види на екрана.
Или може би има някаква нишка възможност директно изнася от ClientDataSet всичко в него има в Excel. Помогнете, ако не и мързелив.


> iVovs # XA0; (22/05/04 15:33) [26]

За да започнете, нека все пак се определят формулировката на въпроса.
Данните трябва да се разтоварят от DBGrid? (Т.е. само тези, които могат да видят)
(В този случай ще се пуска моята версия).
или нужда от качване на пълния набор от данни?
(В този случай ще работи изпълнение jack128).

В случай, че Mooi нужда от пълен разряд.

Необходимо е по принцип за експортиране на данните е, че има в масива от данни, но тъй като DBGrid показва набор от данни, че е възможно да и от него.


> iVovs # XA0; (22/05/04 15:56) [29]

След това, да не се бърка с формулировката на въпроса - са две различни неща.
Можете да промените този код чрез премахване на фиктивен наследник (TMyDBGrid) и по този начин премахване на работа с всички защитени имоти DBGrid. След това, вместо да използвате връзка за данни DataSource.DataSet

Всички SW. Учителю, аз разбирам този въпрос и да получите желаните резултати.
Кодът по-долу е обобщение на информацията, получена по този въпрос - особено за тези, които не искат да се рови в смисъла на отговорите по този въпрос :). Този износ кодови данни от една мрежа към Excel (данни, предложени Grid-си масиви от данни)

процедура TMAinForm.ToExcel (DBgrid: TDBGrid);
Var
А, В: цяло число;
ExApp, WB, WS: Вариант;
започвам
ExApp: = CreateOleObject ( "Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = ExApp.Workbooks [1] .WorkSheets [1];
с DbGrid.DataSource.DataSet правя
започвам
Последно;
Първи;
приключи;
с TMyDBGrid (DBGrid) .DataLink правя
започвам
# XA0; а: = 0;
# XA0; докато не се направи DbGrid.DataSource.DataSet.eof

# XA0; започвам
# XA0; # XA0; за б: = 0 до (FieldCount-1) направи
# XA0; # XA0; започвам
# XA0; # XA0; # XA0; WS.Cells [а + 1, б + 1] .Value: = Полетата [Ь] .AsString;
# XA0; # XA0; приключи;
# XA0; # XA0; # XA0; DbGrid.DataSource.DataSet.Next;
# XA0; а: = а + 1;
# XA0; приключи;
# XA0; ExApp.Visible: = вярно;
# XA0; опитвам
# XA0; ExApp.save; // веднага ще ви подкани да запишете
# XA0; освен // закле да не се отказват, ако се запази
# XA0; приключи;
приключи;
приключи;

Покана (необходимо DBGrid само преминават името):

Много благодаря на Влад и jack128.

Хе, ти не слушаш мъдър съвет и не прочетох статия на първата връзка, виждам? За пореден път, аз ви съветвам, обърнете внимание на варианти на масиви. В повече или по-малко нормален обем дава ускорение в десетки - стотици пъти.


> iVovs # XA0; (22/05/04 16:54) [31]

ЕБК. Така добре ли има нещо измисли :-)
Казвам го отново. Ако имате нужда от освобождаване от набор от данни. След това по-никакъв каналите за връзка "и да работи директно с набор от данни" ОМ.
EOF методи, ели, в непосредствена близост можете да помогнете.

Не ми или не, факт е, че искам да се отличи само превозва сигурен. поле, което показва DBGrid, но през всички записи, които съществуват в набора от данни, което прави моя код.

Освобождаване от набора от данни, Осъзнах също, но аз не се нуждаят от всички области и затова освобождава от грид-а.

-------------------------
И книгите, които четем, че просто не е присъства в тях като помощници тук :)

Прочетох го, но честно казано не разбирам как, в моя конкретен пример, да изтеглят тези данни вариант масив от DBgrid-а.

че е трудно да се разбере,

с DbGrid1.DataSource.DataSet правя
започвам
# XA0; Миналата; // изтеглим всички записи
# XA0; Първи;
# XA0; ArrayData: = VarArrayCreate ([1, RecordCount, 1, Fields.Count] varVariant);
# XA0; // Напълнете масив
# XA0, защото: = 1 до RecordCount направи
# XA0; започне
# XA0; # XA0 продължение J: = 1 до Fields.Count направи
# XA0; # XA0; # XA0; ArrayData [I, J]: = Полетата [J-1] .AsVariant;
# XA0; # XA0; Следваща;
# XA0; край;
приключи;


> iVovs # XA0; (22/05/04 17:19) [34]
> Не, аз съм толкова прав, факт е, че искам да се зареди в Excel
> Само някои. поле, което показва DBGrid

Ех. Снимайте, напишете кода отново

процедура ToExcel;
Var
А, В: цяло число;
ExApp, WB, WS, Прист: Вариант;
започвам
а: = 0;
ExApp: = CreateOleObject ( "Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = ExApp.Workbooks [1] .WorkSheets [1];
с DBGrid1 правя
започвам
# XA0; DataSource.DataSet.DisableControls;
# XA0, докато не се направи DataSource.DataSet.Eof
# XA0; започне
# XA0; # XA0 продължение на б: = 0 до (Columns.Count-1) направи
# XA0; # XA0; започне
# XA0; # XA0; # XA0; WS.Cells [а + 1, б + 1] .Value: = Колони [Ь] .Field.AsString;
# XA0; # XA0; край;
# XA0; # XA0; DataSource.DataSet.Next;
# XA0; # XA0; Inc (а);
# XA0; край;
# XA0; DataSource.DataSet.DisableControls;
# XA0; ExApp.Visible: = вярно;
приключи;
приключи;

Аз не променя масива, нежелание.
Но тя ще се появи на полето, която показва мрежата.

Здравейте, код като бягане, но когато кликнете бутон Excel (например) не # XA0; какво се случва! Какво да правя след това?!

Здравейте, код като бягане, но когато кликнете бутон Excel (например) не # XA0; какво се случва! Какво да правя след това?!

Подкрепете проекта - споделете линка, благодаря!