![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gunslinger |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Снова привет! И снова речь о MyCells
Оказалось, что четыре координаты x1,y1,x2,y2 использовать не получится. Прочитать значение 2х объединенных ячеек в экселе возможно только через диапазон, и работает эта штука так:
Общий план:
Сейчас проверяются ячейки только одинарные. А нужно еще объединенные по 2. Было бы здорово указывать напрямую, но в ОLE штука вроде
Вызывает ошибку недопустимое число параметров. Мои варианты: 1. Хранить координаты ячейки как енум - для буквы соответствие цифра. 2. Затем все соединять в строку. Или может нах не париться и хранить адреса объектов MyCells как строки (они все равно используются только для сравнения), а перед передачей Оле - делать конкатенацию? Тогда нельзя будет делать парсинг по листу forом (тогда делать через енум или еще чего-нибудь в с++, о чем я не знаю). |
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
excel можно переключить в режим адресации R1C1
|
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Знаешь как? Нечто вроде
выдает ошибку. Это сообщение отредактировал(а) Gunslinger - 21.10.2008, 09:57 |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Насколько я помню ничего переключать не надо, он и так воспримет адресацию в любом формате. Только R1C1 ничем не проще, чем A1, диапазон придется задавать все так же в виде 2х точек через ':' (R1C1:R2C2) А что касается диапазона, то проще всего сделать класс для хранения координат (у тебя Address) и сделать ему метод, возвращающий этот адрес в виде строки
Это сообщение отредактировал(а) xvr - 21.10.2008, 10:15 |
||||||
|
|||||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
xvr, а я сейчас отписывать в тему про OLE собрался
Уточненяюсь: R1C1 выглядит как, например, 12,1? Это сообщение отредактировал(а) Gunslinger - 21.10.2008, 10:29 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Нет, оно выглядит как R12C1 |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
ошибка. С одним адресом - тоже. Точно режим переключать не нужно? Добавлено @ 09:53 вижу 2 варианта: 1. Адресация А8:B8. Тогда нужно что-то думать о конвертации букв в цифры. 2. R1C8:R2C8. Нужно думать только о парсинге строки и выдерании цифр. При записи - о конкатенации букв R,C,: с преобразованными в символы цифрами. Но тут проще, так как есть стандартный IntToStr. Это сообщение отредактировал(а) Gunslinger - 22.10.2008, 09:53 |
|||
|
||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Да, действительно нужно
У Application есть метод ConvertFormula, может пригодится:
|
||||||||||
|
|||||||||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
за ConvertFormula спасибо - запомню, если понадобится. К счастью не в этом проекте. И вообще не понадобится - запарил меня уже этот эксел, хочу уже программировать что-нибудь другое. Про засаду R1C1 тоже спасибо, а то я уже сравнение написал.
Для меня пока нет. Единственная мысль - enum. Но при этом хочу оставить адресную структуру как есть, т.е. int x2, y2;. Можно ли присвоить номер enuma? Вроде:
? |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
Gunslinger, скажите что вам нужно конкретно от экселя я вам пример сделаю пока время есть.
|
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
J0ker, спасибо за желание помочь, но с этим форумом я и так обленился. Смысл мысли такой:
1. Oбъединенные ячейки можно читать только через Range. А там адрес в формате A1:B1. 2. Есть класс MyCell, сварганенный общими силами. Это - контрольные ячеки, в которых хранится адрес и значение стопудово известных ячеек в экселе. Чтобы проверить, та структура файла, прежде чем читать, или нет. 3. Можно было бы хранить адреса в текстовом формате, как и Range, а сравнивать текст. Но! далее будет чтение записей. Сколько их будет - хз, так что чтение ячеей делать буду в for. Приростил x,y. Значит придется конвертировать int в string. C конвертером я сам разбирусь, вот только не уверен, можно ли хранить связку буква-цифра в enum (псевдокод в предыдущем посте) - с ним никогда не работал. Вот это меня интересует. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
я не совсем понял что вы хотите делать с enum - enum это простая подстановка выполняемая на этапе компиляции
остальное чуть позже гляну ковырялся я сто лет назад с экселем через COM может вспомню... Добавлено через 2 минуты и 34 секунды
если это конкретный документ или документ основанный на конкретном темплете - я применял именованные объекты - в экселе вы можете поименовать ячейки и рэнджи и потом обращаться к ним по имени |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
вот сваял пример - visual studio - борланда нету... но принцип должен быть тем-же:
Добавлено @ 02:41 PS: я использовал import для упрощения решения, но в принципе можно и руками прописать все обращения к дисп-интерфейсу - но это геморно я там вижу у вас на борланде тоже своя оболочка, так что должно быть похоже Добавлено @ 02:44 PPS: да чуть не забыл - оно коннектится к запущеному приложению и читает ячейку A1 с активной страницы активной книги. Там где закоментаренное CreateInstance - можно создавать новый инстанс, соответственно он будет пустой - без книг. Добавлено @ 02:49 PPPS:что-бы было понятно - такие вызовы как _bstr_t v = pSheet->Cells->Item[1][1]; - означают вызов pSheet->GetCells()->GetItem(...) с соответствующими параметрами - они просто в VC++ организованы через праперти - microsoft specific PPPPS поправил немного Это сообщение отредактировал(а) J0ker - 23.10.2008, 04:33 |
|||
|
||||
| Gunslinger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Цель кода только не понял. За раз все равно не даст обратиться сразу к двум ячейкам (по крайней мере, через Cells, а с Range опять приходим к вопросу конвертации буква-цифра и наоборот).
з.ы. По вашему коду вопрос. В борланде ничего подобного вроде ActiveWorkbook, ActiveSheet не делал... Хотя через Оле работал, там через проперти брал сразу "Workbooks", "Cells" и т.д. За меня борлан делает такую подстановку или это способ обращения другой? |
||||
|
|||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Присвоить можно, а преобразовать в строку - нет (получится обычное число) Вот функция, преобразующая номер в букву (или несколько) (Писал прямо тут, не проверял)
Добавлено через 5 минут и 49 секунд
В Borland'е надо брать компонент ExcelApplication с вкладки Office2K (или OfficeXP, смотря какой набор контролов активирован), там будет сразу все в виде нормальных пропертей и методов |
||||||||
|
|||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |