Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка данных из Excel 
:(
    Опции темы
Самозванка
Дата 13.11.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA

Репутация: нет
Всего: 40



При загрузке данных из Excel в стрингрид по нажтию кнопки делаю так....
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(!OpenDialog1->Execute())
         return;
    ExcelClass.CreateApplication();
    ExcelClass.OpenDocument(OpenDialog1->FileName);
    for(int i=1;i<1000;i++)
        for(int j=1;j<15;j++)
                 StringGrid1->Cells[j][i] = ExcelClass.GetCell(i,j);
    ExcelClass.CloseAppication();

Код класса:
Код

//---------------------------------------------------------------------------
void __fastcall TExcelClass::CreateApplication()
{
        Excel=CreateOleObject("Excel.Application");
}
//---------------------------------------------------------------------------
void __fastcall TExcelClass::OpenDocument(AnsiString FileName)
{
        TemplatePath=FileName+"t";
    Excel.OlePropertyGet("Workbooks").OleProcedure("Open",FileName.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TExcelClass::CloseAppication()
{
    DeleteFileA(TemplatePath);
    Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs",TemplatePath.c_str());
    DeleteFileA(TemplatePath);
    Excel.OlePropertyGet("Workbooks").OleProcedure("Close");
    Excel.Clear();
    Excel = Unassigned;
}
//---------------------------------------------------------------------------
AnsiString  TExcelClass::GetCell(int i,int j)
{
    return Excel.OlePropertyGet("Cells",i,j).OlePropertyGet("Value");
}


Так вот всё работает но проблема в том, что мы не знаем скока строк в файле екселя... и мне надо как то избавиться от цикла....
Код

    for(int i=1;i<1000;i++)
        for(int j=1;j<15;j++)
                 StringGrid1->Cells[j][i] = ExcelClass.GetCell(i,j);

С OLE давно не работала, можно ли как то определить что данные в екселевском файле закончились? а не пробегать пустые строчки? Есть ли такая функция?
PM MAIL ICQ   Вверх
Самозванка
Дата 13.11.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA

Репутация: нет
Всего: 40



никто не знает или непонятен вопрос???
PM MAIL ICQ   Вверх
ama_kid
Дата 13.11.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(Самозванка @  13.11.2007,  15:16 Найти цитируемый пост)
можно ли как то определить что данные в екселевском файле закончились?
А что означает - "данные закончились"? Какой признак "законченности"? В конце концов - можно принять пустую строку за сигнатуру "окончания" и сделать break циклу...
Цитата(Самозванка @  13.11.2007,  15:16 Найти цитируемый пост)
не знаем скока строк в файле екселя
на листе экселя находится максимум 65536 строк...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Самозванка
Дата 13.11.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA

Репутация: нет
Всего: 40



ama_kid,  Спасибо ,я с помощью break токо что и сделала. Просто так программа долго весит, пока считывается информация из файла

А как сделать чтобы конец файла бы был по последнему введенному тексту, а то у меня псле пустых строк еще текст в файле идти может....?

Это сообщение отредактировал(а) Самозванка - 13.11.2007, 17:09
PM MAIL ICQ   Вверх
dumb
Дата 13.11.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



наверное как-то так:
Код

class TExcelClass ...
{
...
  public:
    int Rows, Columns;
...

Код

void __fastcall TExcelClass::OpenDocument(AnsiString FileName)
{
  TemplatePath = FileName+"t";
  Excel.OlePropertyGet("Workbooks").OleProcedure("Open",FileName.c_str());
  Excel.OlePropertyGet("Cells").OlePropertyGet("SpecialCells",11).OleProcedure("Activate"); // 11 = xlCellTypeLastCell
  Rows = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
  Columns = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
}


Добавлено через 1 минуту и 32 секунды
красоту(типа затягивания получения границ в метод) наводите сами... smile
PM MAIL   Вверх
Zan Zarabear
Дата 1.2.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Попробуйте от это:
Код

Variant Range = WorkSheet.OlePropertyGet("UsedRange");

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1059 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.