Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вариантный массив, Вывод данных массива 
V
    Опции темы
lotax
  Дата 3.12.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Приветствую.
Для вывода данных в Excel, использую вариантный массив.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  E: Integer;
  ArrayData, Range: Variant;
begin
  E := 0;
  EXL := CreateOleObject('Excel.Application');
  EXL.Application.EnableEvents := False;
  EXL.Workbooks.Add;
  EXL.Visible := False;
  ArrayData := VarArrayCreate([1, Table1.RecordCount, 1, 3], varVariant);
  Table1.First;
  while not Table1.Eof do
  begin
    Inc(E);
    ArrayData[E, 1] := Table1NPACHKI.AsString;
    ArrayData[E, 2] := Table1NCEHA.AsString;
    ArrayData[E, 3] := Table1NCEHA2.AsString;
    Table1.Next;
  end;
  Range := EXL.Range['A1:C'+IntToStr(Table1.RecordCount)];
  Range.Value := ArrayData;
  VarClear(ArrayData);
  EXL.Visible := True;
end;


Подскажите, пожалуйста, как реализовать???
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  E: Integer;
  S: String;
  ArrayData, Range: Variant;
begin
  E := 0;
  EXL := CreateOleObject('Excel.Application');
  EXL.Application.EnableEvents := False;
  EXL.Workbooks.Add;
  EXL.Visible := False;
  //ArrayData := VarArrayCreate([1, Table1.RecordCount, 1, 3], varVariant);
  //Делаю группировку..
  //Как создать массив, если количество данных не известно
  Table1.First;
  while not Table1.Eof do
  begin
    //Inc(E);
    S := Table1NCEHA.AsString;
    //ArrayData[E, 1] := S;
    //Range := EXL.Range['A1:C'+IntToStr(Table1.RecordCount)];
    //  Range.Value := ArrayData;
    //Как отобразить данные 1 поля
    while (not Table1.Eof) and (Table1NCEHA.AsString = S) do
    begin
      //Как отобразить данные 2 полей
      //ArrayData[E, 1] := Table1NCEHA.AsString;
      //ArrayData[E, 2] := Table1NCEHA2.AsString;
      //Range := EXL.Range['A1:C'+IntToStr(Table1.RecordCount)];
      //Range.Value := ArrayData;
      Table1.Next;
    end;
  end;
  VarClear(ArrayData);
  EXL.Visible := True;
end;

--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
pseud
Дата 3.12.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



VarArrayRedim procedure

Resizes a Variant array.

Unit

System

Category

Variant support routines

procedure VarArrayRedim(A: Variant; HighBound: Integer);

Description

VarArrayRedim resizes the given Variant array by changing the high bound of the rightmost dimension to the given value. The A parameter can be a Variant or an OleVariant, and it must be possible to assign a value to A (A must be an lvalue).

Existing elements of the array are preserved, and new elements are set to zero or empty. An EVariantError exception is thrown if the Variant given by A is not an array, or if there is not enough memory to resize the array.

Note: A Variant array can’t be resized while it is locked.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
lotax
Дата 3.12.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Я правильно понял?

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  E: Integer;
  ArrayData, Range: Variant;
  S: String;
begin
  E := 0;
  EXL := CreateOleObject('Excel.Application');
  EXL.Application.EnableEvents := False;
  EXL.Workbooks.Add;
  EXL.Visible := False;
  ArrayData := VarArrayCreate([1, 1, 1, 3], varVariant);
  Table1.First;
  while not Table1.Eof do
  begin
    S:= Table1NCEHA.AsString;
    Inc(E);
    VarArrayRedim(ArrayData, 3);
    ArrayData[1, 1] := S;
    Range := EXL.Range['A' + IntToStr(E) + ':A' + IntToStr(E)];
    Range.Value := ArrayData;
    while (not Table1.Eof) and (Table1NCEHA.AsString = S) do
    begin
      Inc(E);
      VarArrayRedim(ArrayData, 3);
      ArrayData[1, 1] := Table1NPACHKI.AsString;
      ArrayData[1, 2] := Table1NCEHA.AsString;
      ArrayData[1, 3] := Table1NCEHA2.AsString;
      Range := EXL.Range['A' + IntToStr(E) + ':C' + IntToStr(E)];
      Range.Value := ArrayData;
      Table1.Next;
    end;
  end;
  VarClear(ArrayData);
  EXL.Visible := True;
end;


Это сообщение отредактировал(а) lotax - 3.12.2008, 13:59
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
pseud
Дата 3.12.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(lotax @  3.12.2008,  13:57 Найти цитируемый пост)
Я правильно понял?

не знаю - не пользовался 
за что купил - за то продал
НО
Цитата

 changing the high bound of the rightmost dimension

т.е. ресайзит только последнее значение в массиве_размерностей_массива

как я понял у тебя массив [1, 1, 1, 3] = 1 строка в 3 столбца
так вот командой 
Код

VarArrayRedim(a, 4);

ты сделаешь 1 строка в 4 столбца.
т.е. тебе бы переделать логику массива на 3 столбца/ одна строка, т.е. [1, 3, 1, 1]


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
lotax
Дата 4.12.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



pseud, большое спасибо, разобрался...
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.