Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение таблицы StringGrid в Excel 
:(
    Опции темы
Ярослав
Дата 25.7.2010, 21:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 189
Регистрация: 8.6.2009

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



Доброе время суток помогите пожалуйста.Мне необходимо поместить донные с таблицы StringGrid в Excel.По форуму есть пару тем но конкретного кода не нашол.Буду благодарин за помощь.
PM MAIL   Вверх
Данкинг
Дата 25.7.2010, 22:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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





--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ярослав
Дата 26.7.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 189
Регистрация: 8.6.2009

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



Та чёт туговато там,я видел.Может кто то с этим работал и есть исходник,А
PM MAIL   Вверх
NightElf
Дата 26.7.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.2.2006
Где: Украина, Луганска я обл.

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



Вариант 1. Вставлять сразу диапазонами, а не в каждую ячейку:

Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TDateTime tm1, tm2;
    String Range;
    Variant A(OPENARRAY(int, (0, StringGrid1->ColCount)), varVariant);
    Variant XL, v0, v1;

    tm1 = Time();
    XL = CreateOleObject("Excel.Application");
    XL.OlePropertySet("Visible", CheckBox1->Checked);
    v0 = XL.OlePropertyGet("Workbooks");
    v0.OleProcedure("Add");
    v1 = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);

    for (int i = 0; i < StringGrid1->RowCount; i++) {
        for (int j = 0; j < StringGrid1->ColCount; j++) {
            A.PutElement(StringGrid1->Cells[j][i],j);
        }
        Range.printf("A%d:J%d", i+1, i+1);
        v1.OlePropertyGet("Range", Range.c_str()).OlePropertySet("Value", A);
    }

    XL.OlePropertySet("DisplayAlerts",false);
    XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".xls"));
    XL.OleProcedure("Quit");

    tm2 = Time();
    ShowMessage("done with " + TimeToStr(tm2 - tm1));
}


Вариант 2. Сформировать строковый массив, слова в строках д.б. разделены символом табуляции и все это вставить через Clipboard.

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList* data = new TStringList();
    String line;
    TDateTime tm1, tm2;
    Variant XL, v0, v1;

    tm1 = Time();
    //вставим в Excel...
    XL = CreateOleObject("Excel.Application");
    XL.OlePropertySet("Visible", CheckBox1->Checked);
    v0 = XL.OlePropertyGet("Workbooks");
    v0.OleProcedure("Add");
    v1 = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);

    //добавляем строки в которых слова разделены Tab-ом, Excel - поймет...
    for (int i = 0; i < StringGrid1->RowCount; i++) {
        line = StringGrid1->Cells[0][i];
        for (int j = 1; j < StringGrid1->ColCount; j++) {
            line = line  + "\t" + StringGrid1->Cells[j][i];
        }
        data->Add(line);
    }
    //в Clipboard...
    Clipboard()->AsText = data->Text;

    v1.OlePropertyGet("Range", "A1:A1").OleProcedure("Select"); //например начиная с этой ячейки...
    v1.OleProcedure("Paste");

    Clipboard()->Clear();

    XL.OlePropertySet("DisplayAlerts",false);
    XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".xls"));
    XL.OleProcedure("Quit");

    tm2 = Time();
    ShowMessage("done with " + TimeToStr(tm2 - tm1));

    delete data;
}


Взято с forum.codenet.ru

Это сообщение отредактировал(а) NightElf - 27.7.2010, 09:21
PM MAIL ICQ   Вверх
NightElf
Дата 26.7.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.2.2006
Где: Украина, Луганска я обл.

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



Если будет нужно, то вот этот эпизод
Цитата

Range.printf("A%d:J%d", i+1, i+1);
v1.OlePropertyGet("Range", Range.c_str()).OlePropertySet("Value", A);

Можно заменить на этот
Цитата

Sheet.OlePropertyGet("Range",Sheet.OlePropertyGet("Cells", i+1, 1), Sheet.OlePropertyGet("Cells", i+1, 14)).OlePropertySet("Value", A);

Удачи smile 
PM MAIL ICQ   Вверх
Ярослав
Дата 26.7.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 189
Регистрация: 8.6.2009

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



Спосибо,но ошибку выдаёт этот код
PM MAIL   Вверх
Данкинг
Дата 26.7.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Ярослав @  26.7.2010,  13:40 Найти цитируемый пост)
Та чёт туговато там,я видел.

Что там туговатого? Вроде нормальный пример.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ярослав
Дата 26.7.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 189
Регистрация: 8.6.2009

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



XL пишет ошибку,что может быть(в первом варианте) smile 
PM MAIL   Вверх
Данкинг
Дата 26.7.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Ярослав @  26.7.2010,  15:18 Найти цитируемый пост)
XL пишет ошибку

Текст ошибка - тайна великая есть?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ярослав
Дата 26.7.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 189
Регистрация: 8.6.2009

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



[C++ Error] Unit1.cpp(25): E2451 Undefined symbol 'XL'
[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'CreateOleObject'
[C++ Error] Unit1.cpp(26): E2451 Undefined symbol 'CheckBox1'
[C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'v0'
[C++ Error] Unit1.cpp(29): E2451 Undefined symbol 'v1'
PM MAIL   Вверх
Данкинг
Дата 26.7.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Ярослав @  26.7.2010,  15:25 Найти цитируемый пост)
[C++ Error] Unit1.cpp(25): E2451 Undefined symbol 'XL'

Ну и? Переменная XL объявлена?
Цитата(Ярослав @  26.7.2010,  15:25 Найти цитируемый пост)
[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'CreateOleObject'

Не уверен насчёт Билдера, но в дельфи эта функция объявлена в модуле ComObj. Попробуй его подключить.
Цитата(Ярослав @  26.7.2010,  15:25 Найти цитируемый пост)
[C++ Error] Unit1.cpp(26): E2451 Undefined symbol 'CheckBox1'
[C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'v0'
[C++ Error] Unit1.cpp(29): E2451 Undefined symbol 'v1' 

Ну, сам догадайся, что сиё есть.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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