Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Сохранение StringGrid в Excel


Автор: DoNUzi 7.6.2010, 01:13
У меня есть заполненная таблица StringGrid с фиксированным количеством строк и столбцов...
Как вывести ее на печать разобрался...
А вот как сохранить таблицу в файле Excel не знаю((((
Похожую тему видел...но сколько не пробовал , не крутил..так и не получилось((((
Я правильно понимаю, что версия Mic.Office не влияет?????





Автор: Данкинг 7.6.2010, 01:32
Цитата(DoNUzi @  7.6.2010,  02:13 Найти цитируемый пост)
Exel 

Что такое "Exel"?
Цитата(DoNUzi @  7.6.2010,  02:13 Найти цитируемый пост)
Я правильно понимаю, что версия Mic.Office не влияет?????

На что?

В общем, ищи по форуму: примеров работы с xls было и есть множество.

Автор: DoNUzi 7.6.2010, 02:26
Я видел топики этого вопроса для Delphi...но для C++Builder не нашел
Delphi в Builder переводить не умею((

Автор: Usper 7.6.2010, 07:58
Значит плохо искал, они точно есть, вот пример работы с Excel`ем для начала:
Код

#include  <ComObj.hpp>
...
void Foo ()
{
    Variant App, Books, Book, Sheets, Sheet, Cells, Cell;
    try
    {
        App=CreateOleObject("Excel.Application");
    }
    catch (...)
    {
        Application->MessageBoxA("Не могу запустить сервер Microsoft Excel. Продолжение невозможно.",
            "Ошибка", MB_ICONERROR);
        return;
    }
    App.OlePropertySet("Visible",true);  //делаем Excel видимым
    Books=App.OlePropertyGet("Workbooks");
    App.OlePropertySet("SheetsInNewWorkbook",3); //создаём 3 листа в книге
    Books.OleProcedure("Add");
    Book=Books.OlePropertyGet("Item",1);
    Sheets=Book.OlePropertyGet("Worksheets");
    Sheet=Sheets.OlePropertyGet("Item",1);  //ссылка на первый лист в книге
    Sheet.OleProcedure("Activate");
    Cells=Sheet.OlePropertyGet("Cells");
    Cell=Cells.OlePropertyGet("Item",10,5); //выбираем ячейку E10...
    Cell.OlePropertySet("Value","Текст однака");  //...и пишем туда что-нибудь
}


А вот информация для изучения для продолжения: http://wladm.narod.ru/Borland/excel.html#4

Автор: DoNUzi 7.6.2010, 10:45
Usper, Большое спасибо!!!! smile 
Искал плохо не потому что ленивый...учусь в военке, время на интернет ограниченно(((

Автор: DoNUzi 8.6.2010, 09:47
А как задать сохранение значения из ячейки StringGrid??
Код

String a;
a=StringGrid1->Cells[10][5];
Cell=Cells.OlePropertyGet("Item",10,5);
Cell.OlePropertySet("Value", a);

во время выполнения выводиться сообщение об ошибке:
Project 1.exe raised exception class EOleSysError with message
'Неверный тип переменной'. Process stopped. Use Step or Run to continue.
На месте "а" переменная какого типа  должна быть???

Автор: Данкинг 8.6.2010, 09:51
Цитата(DoNUzi @  8.6.2010,  10:47 Найти цитируемый пост)
На месте "а" переменная какого типа  должна быть??? 

Ставь Variant- не ошибёшься. smile

Добавлено через 1 минуту и 59 секунд
А вообще, неплохо бы тип ячейки Excel принудительно указать.

Автор: DoNUzi 8.6.2010, 10:39
проблему решил таким способом...работает))) smile 
Код

 for (int i=0; i <=StringGrid->RowCount ; i++)
  { for (int j=0; j<=StringGrid->ColCount; j++)
   {
    a=table2->Cells[j][i];
    vVarCell= vVarSheet.OlePropertyGet("Cells").
            OlePropertyGet("Item",i+1,j+1);

    vVarCell.OlePropertySet("Value", a.c_str());
   }
  }


Автор: lyucean 10.6.2010, 10:48
Данный метод подходит только для маленьких БД ..например экспорт 7000 строк по 6 ячеек уже будет занимать неприличное время.
 

Автор: DoNUzi 10.6.2010, 11:17
Ну да...есть такое дело((((
А другие варианты есть???
 smile 

Автор: lyucean 10.6.2010, 15:10
Цитата(DoNUzi @ 10.6.2010,  11:17)
Ну да...есть такое дело((((
А другие варианты есть???
 smile

как найду, так сразу ..

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