Excel цикл по столбцам

Нужно в зависимости от длины поля в таблице, которая копируется в Excel, менять column.width в Excel
Что-то типа
for i:=0 to 25 do
if a>b then
worksheet.columns[i].w >


malamba ( 2003-08-07 19:10 ) [1]

Что за таблица? И что за длина поля?


gsvserg ( 2003-08-07 19:23 ) [2]

Таблица AdoQuery, в ней несколько полей. Все поля строковые. Перекидываю ее в Excel. Вычисляю максимальную длину строки в каждом поле, после нужно установить ширину колонок в Excel, чтобы было видно всю строку.


Dred2k ( 2003-08-07 20:16 ) [3]

Вот тебе кусок кода.

for j := Low(tmpColNum) to High(tmpColNum) do begin
App.Columns[j + 1].ColumnW >App.Cells[1, j + 1].Value := FDBGrid.Columns[tmpColNum[j]].Title.Caption;
App.Cells[1, j + 1].HorizontalAlignment := DefExcelAlignment[FDBGrid.Columns[tmpColNum[j]].Title.Alignment];
App.Cells[1, j + 1].Font.Bold := True;
App.Cells[1, j + 1].Interior.Color := RGB(192, 192, 192);
App.Cells[1, j + 1].Borders.Color := RGB(0, 0, 0);
( я поленился, наверное ; ) Вот тебе кусок кода.

for j := Low(tmpColNum) to High(tmpColNum) do begin
App.Columns[j + 1].ColumnW >App.Cells[1, j + 1].Value := FDBGrid.Columns[tmpColNum[j]].Title.Caption;
App.Cells[1, j + 1].HorizontalAlignment := DefExcelAlignment[FDBGrid.Columns[tmpColNum[j]].Title.Alignment];
App.Cells[1, j + 1].Font.Bold := True;
App.Cells[1, j + 1].Interior.Color := RGB(192, 192, 192);
App.Cells[1, j + 1].Borders.Color := RGB(0, 0, 0);
end;

tmpColNum — массив, содержащий номера выводимых мной колоной DBGrid-а. Ширина колонок в Excel выставляется соразмерно ширине колонок грида. Коэффициент соразмерности можно при желании сформулировать и в общем виде (я поленился, наверное ;)).
Кроме ширины выставляются свойства первой строки на листе (заголовок). Лист — текущий.


Alex Bredin ( 2003-08-08 10:44 ) [4]

я тож пытался так сделать, но потом сообразил, что Excel сделает это лучше))

//пробуем применить автоформат.
Range1:=Sheet.Range[Sheet.Cells[StartR, StartC],Sheet.Cells[StartR + Rows, StartC + Cols — 1]];
Range1.AutoFormat(XLFormat,True,True,True,True,True,True);

XLFormat-цел.число(я беру 1)-посмотри


Alex Bredin ( 2003-08-08 10:50 ) [5]

а вообще над Range можно извращаться как хочешь, только перед этим включи запись макроса, а потом перенеси его текст в Delphi

Читайте также:  Прошивка роутера ростелеком f st 1744 v4


gsvserg ( 2003-08-08 11:43 ) [6]

Alex Bredin © (08.08.03 10:44)
Спасибо, попробовал твой метод — работает.
Только в Excel появляются линии под первой и предпоследней строками. Я так понял что это из-за xlFormat=1.
Всем спасибо.


Alex Bredin ( 2003-08-08 14:53 ) [7]

понял ты неправильно.
Цитата из экселевского макроса:

Selection.AutoFormat Format:=xlRangeAutoFormatSimple, Number:=True, Font _
:=True, Alignment:=True, Border:=True, Pattern:=True, W >
думаю все ясно и так


gsvserg ( 2003-08-08 15:35 ) [8]

У меня есть статистика НФЛ, в которой я захожу в таблицу для создания условно отформатированных тепловых карт.

Мои данные начинаются в столбце E и заканчиваются в столбце P, но мне нужно, чтобы они начинались с a2 и переходили к последней строке этого столбца, а затем делали то же самое для каждого столбца, чтобы условия не перекрывались и создавался один большой Тепловая карта. Я просто хочу тепловую карту для каждого отдельного столбца, чтобы я мог проанализировать этот путь. (НЕ ВСЕ КОЛОННЫ СОДЕРЖАТ ЦИФРЫ, И ОНИ РАСПРОСТРАНЯЮТСЯ, ТАК ОБЫЧНОЕ ФОРМАТИРОВАНИЕ НЕ ДОЛЖНО ПОДНИМАТЬ ТЕКСТОВЫЕ КОЛОННЫ ВСЕГДА)

Как бы я зацикливался на столбцах без явной ссылки на них? Мой статус для одной позиции не будет содержать столько же столбцов, сколько для другой.

Мне нужно, чтобы это было как можно более динамичным. Кроме того, кто-нибудь может помочь мне убрать части условного форматирования? Для этого я просто скопировал код, записанный макросом, поскольку сам не знаю, как его скомпилировать.

Создадим самый простой цикл используя VBA в Excel.

В этот раз напишем всё своими руками:

Расшифрую, приведённый выше код VBA:

  • Весь код макроса заключается между Sub и End Sub, после Sub пишется название макроса.
  • Текст после ‘ означает комментарий
  • Цикл заключается между For … to и Next
  • i — в моём случае переменная, Вы можете выбрать любую другую, в том числе поддерживаются и русские обозначения (например: For переменная=1 To 10 …)
  • Cells(строка, столбец) – ячейка в которую хотим что-то записать или из которой хотим извлечь информацию, в нашем случае столбец мы указали константу (1 и 2), а строку сделали переменной (i+1).
  • Range(“b1”) возвращает значение ячейки “B1”
Читайте также:  Преобразование double в float возможна потеря данных

А ещё, можно сразу дописать минимакрос по очистке диапазона от значений