C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Builder&Excel
Гость_Dima
Отправлено: 11.08.2003, 13:39


Не зарегистрирован







Здравствуйте.
Начал разбираться с работой в excel через OLE и возникла следующая проблема: никак не удается записать данные в ячейки с номаром строки больше 256. Что просто циклом, так и просто по номеру ячейки.

// Исходный код
Variant app, books, book, sheet, cell, range, Exec, sel;
app = CreateOleObject("Excel.Application");
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Add"));
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);

for (int j=0;jColCount;j++)
{
for (int i=0;i<256;i++) // Если поставить большее число, то вылетает
{
cell = sheet.OlePropertyGet("Cells",i+1,j+1); // вылетает на этой строчке
cell.OlePropertySet("Value", ResultGrid->Cells[j][i].c_str());
}
}
app.OlePropertySet("Visible",2);

Подскажите, пожалуйста как это можно вылечить.
SEDEGOFF
Отправлено: 11.08.2003, 13:56


Ученик-кочегар

Группа: Участник
Сообщений: 19



Столбцов не может быть больше 256
Гость_Dima
Отправлено: 11.08.2003, 15:41


Не зарегистрирован







Так в том-то и дело что не получается создать больше 256 строк
SEDEGOFF
Отправлено: 12.08.2003, 06:04


Ученик-кочегар

Группа: Участник
Сообщений: 19



Если ты внимательно посмотришь
cell = sheet.OlePropertyGet("Cells",[B]i+1[B],j+1);
то как раз ты пытаешься обратиться к 257 столбцу
Guest
Отправлено: 12.08.2003, 08:46


Не зарегистрирован







>Если ты внимательно посмотришь
>cell = sheet.OlePropertyGet("Cells",[B]i+1[B],j+1);
>то как раз ты пытаешься обратиться к 257 столбцу

j — у меня гарантированно не превышает 20 по условиям задачи
но даже если я пишу строку
cell = sheet.OlePropertyGet("Cells",256+i,j+1);
вылетает на первом шаге
З.Ы. как я понимаю адрессация ячеек идет как [строка][столбец]?
SEDEGOFF
Отправлено: 12.08.2003, 09:42


Ученик-кочегар

Группа: Участник
Сообщений: 19



А я всегда обращался как столбец->строка (A1)
Гость_Dima
Отправлено: 12.08.2003, 12:48


Не зарегистрирован







а можешь подсказать как выглядит строка вызова?
Гость_Dima
Отправлено: 12.08.2003, 13:02


Не зарегистрирован







Спасибо за помощь. Я нашел как эта штука все-таки работает:
cell = sheet.OlePropertyGet("Cells").OlePropertyGet("Item",i+1,j+1);
SEDEGOFF
Отправлено: 12.08.2003, 13:04


Ученик-кочегар

Группа: Участник
Сообщений: 19



cell = sheet.OlePropertyGet("Range", "H4");//выделяю ячейку, если нужно выделить обрасть то пишу H4:I4
cell.OlePropertyGet("Font").OlePropertySet("Bold",true); // делаю шрифт жирным
String g = "Итого";
cell.OlePropertySet("Value", g.c_str()); //вставляю значение ячейки

А вообще все остальные команда можно посмотреть в HELP к VB

Вернуться в Вопросы программирования в C++Builder