Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2014, 10:04
lericen lericen вне форума
Прохожий
 
Регистрация: 16.04.2014
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию DELPHI Excel большое количество столбцов

Добрый день

Подскажите пожалуйста. Есть рабочий цикл:

Код:
XArr:=VarArrayCreate([1,ZQuery1.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application'); // Nicaaiea OLE iauaeoa
XL.WorkBooks.add;
XL.visible:=False;

j := 1;
ZQuery1.First;
while not ZQuery1.Eof do
begin
i:=1;
while i<=ZQuery1.FieldCount do
begin
XArr[i] := ZQuery1.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+ZQuery1.FieldCount)+IntToStr(j)].Value := XArr;
ZQuery1.Next;
j:=j+1;
end;

в таблице Mysql с которой идет выборка данных 100 столбцов

при формирование файла Эксель выкидывает ошибку, в инете порыл - проблема связана с кол-вом столбцов

То есть если столбцов от A1- до Z1 то он формируется нормально. Проверял

Если больше столбцов... то ошибка.

Код:
XL.Range['A'+IntToStr(j),
CHR(64+ZQuery1.FieldCount)+IntToStr(j)].Value

как вот этот переделать чтобы после Z он двигался дальше АА, АВ

MAD: пользуемся тегами, иначе последуют баны.

Последний раз редактировалось M.A.D.M.A.N., 16.04.2014 в 10:42.
Ответить с цитированием
  #2  
Старый 16.04.2014, 10:55
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Если память не изменяет, там идёт А, B, С .. Z, AA, AB, AC
Откуда тут цифры прикреплённые к буквам?


Вам нужно посчитать деление нацело ваших колонок на 26.

Если 0, значит вам укладываетесь в алфавит.
Если 1, значит вам нужна первая "дополнительная" буква.
Если 2, значит нужна вторая дополнительная буква.

Для нумерации букв можно использовать ASСII таблицу:
65 - A, 66 - B ... и так далее.

Примерно:
Код:
Chr(65 + (ColumnCount div 26) - 1)

65 - 1 можно упростить. Оставил в фрмуле для наглядности
Ответить с цитированием
  #3  
Старый 16.04.2014, 12:48
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Попробуйте не использовать буквы. Используйте целые числа;
Код:
ex.cells[Y,X]:=s;
S- string
x,y: integer; / X-номер строки, Y- номер столбца

Последний раз редактировалось draginimp, 16.04.2014 в 12:53.
Ответить с цитированием
  #4  
Старый 16.04.2014, 17:27
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Да, числовая индексация решает многие проблемы.
Если диапазон ячеек формировать так:
Код:
    Ex.Range[Ex.Cells[j, 1], Ex.Cells[j, ZQuery1.FieldCount]].Value := Arr;
То экспорт проходит нормально и на 200-х столбцах.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025