Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Excel - нумерация столбцов(A-Z)


Автор: uranpro 31.7.2008, 11:16
сделал отчет, в котором много столбцов. проблема в том, что программа автоматически наращивает их.. выдает ошибку, когда я пытаюсь обратиться к столбцу chr(ord('Z')+1)  ... есть нумерация формата RICJ как ее использовать ? пытаюсь обратиться к ячейке: range('R1C1').value

Автор: Данкинг 31.7.2008, 11:34
Не совсем понял, что тебе нужно. Но вроде обращаются так:
Код

...range['A1','F1']...

Автор: uranpro 31.7.2008, 11:42
Данкинг, можно обращаться и так... кто как хочет)) как мне программно обратиться к столбцу, который идет после Z .. к AA
есть формат нумерации столбцов, допустим было A1 а теперь R1C1 - (R-row; C-column) только как его использовать в программе ?

Автор: Poseidon 31.7.2008, 12:19
Цитата(uranpro @  31.7.2008,  11:42 Найти цитируемый пост)
есть формат нумерации столбцов, допустим было A1 а теперь R1C1 - (R-row; C-column) только как его использовать в программе ?
Эт тебе сам эксель так подсовывает. Используй как и ранше. Не R1C1, а А1. Что бы было легче, в экселе это можно отключить с настройках.

Автор: uranpro 31.7.2008, 12:37
ребят, мне легче использовать R1C1 т.к. столбцов в отчете 30 это мне надо создавать отдельный модуль преобразования номера в название столбца. пример: входит 1 выходт A, входит 25 выходит AA, и тд... понимаете в чем проблема ?

Добавлено через 1 минуту и 10 секунд
программа работает с excel, не человек.. все надо делать программно.

Автор: Albinos_x 31.7.2008, 12:45
здесь я писал об этом: http://forum.vingrad.ru/forum/topic-84634.html

Автор: uranpro 31.7.2008, 14:14
Albinos_x, хочешь сказать, что тут только один вариант ?
Код

s:=char(ord('A')+num);
If ord(s[1])>ord('Z') then
s:='A'+char(ord('A')+(num mod 26)-1);

а по R1C1 обращаться нельзя ? или по номеру

Автор: Poseidon 31.7.2008, 18:08
Цитата(uranpro @  31.7.2008,  14:14 Найти цитируемый пост)
а по R1C1 обращаться нельзя ? или по номеру 
Ячейки в Экселе (тут Эксель подразумевается не сама программа, а OLE-обьект) нумеруются А1, В1 и т.д. Представление в виде R1C1 делает сам Эксель (программа). Поэтому ты не можешь на прямую обратится к Ole-обьекту и попросить у него ячейку R1C1. Он таких не знает. Либо конвертировать R1C1 в А1, либо сразу запрашивать А1. Кстати, это в последних версиях Экселя (программы) появилась такая "фишка" как R1C1. Ранше было только А1.

Автор: Albinos_x 31.7.2008, 18:38
Цитата(uranpro @  31.7.2008,  14:14 Найти цитируемый пост)
Albinos_x, хочешь сказать, что тут только один вариант ?

два варианта...  а способов реализации ещё больше))))

Автор: uranpro 1.8.2008, 10:06
Poseidon
Albinos_x, спасиб, понятно)

Автор: RockClimber 1.8.2008, 10:56
uranpro, в принципе, в экселе на лист можно вставить функцию "АДРЕС" ("ADDRESS" в английской версии), которая возвращает адрес вида "А1" по заданному номеру строки и столбца. Правда проблема в том, что, в отличие от других функций экселя, она отсутствует в объекте Allication.WorksheetFunction. Если она там есть (или есть где-то еще), только называется сильно иначе, ее можно было бы вызывать из Delphi...

Автор: Zmitro 4.8.2008, 08:51
cells(2,8)
где 2 - номер строки, а 8 - номер столбца

Автор: uranpro 4.8.2008, 10:33
всем спасибо!)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)