IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> С++ Builder6 & Excel
18192123
сообщение 4.10.2009 21:10
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здравствуйте!

Подскажите пожалуйста, можно ли содержимое компонента-таблицы StringGrid экспортировать в документ Excel?
Если да, то как это делается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 16.10.2009 20:14
Сообщение #2


Гость






Не-не-не... smile.gif Билдер - это тебе не Дельфи, тут вся работа происходит через OlePropertyGet/OlePropertySet/OleFuntion/OleProcedure... Вот так работает экспорт в Excel:
bool SaveAsExcelFile(TStringGrid *AGrid, AnsiString ASheetName, AnsiString AFileName)
{
const int xlWBATWorksheet = -4167;

int bounds[4] = {0, AGrid->RowCount, 0 , AGrid->ColCount };
Variant Array = VarArrayCreate(bounds, 3, varVariant);
for(int i = 0; i < AGrid->RowCount; i++)
{
for(int j = 0; j< AGrid->ColCount; j++)
{
Array.PutElement(AGrid->Cells[j][i], i, j );
}
}

Variant XLApp = CreateOleObject("Excel.Application");
try
{
// Hide Excel
XLApp.OlePropertySet("Visible", false);
// Add new Workbook
XLApp.OlePropertyGet("WorkBooks").OleFunction("Add", xlWBATWorksheet);

Variant Sheet =
XLApp.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1).
OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);

Sheet.OlePropertySet("Name", ASheetName.c_str());

Variant Cell1 = Sheet.OlePropertyGet("Cells", 1, 1);
Variant Cell2 = Sheet.OlePropertyGet("Cells", AGrid->RowCount + 1, AGrid->ColCount + 1);

Variant fRange = Sheet.OlePropertyGet("Range", Cell1, Cell2);
fRange.OlePropertySet("Value", Array);

XLApp.OlePropertySet("DisplayAlerts",false);
XLApp.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1).OleProcedure("SaveAs", AFileName.c_str());
XLApp.OleProcedure("Quit");
}
catch(...)
{
//
ShowMessage("Экспорт данных - Ошибка !!!");
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Вызывать - так:
SaveAsExcelFile(sgTable, "test", "F:\\aga.xls");
}
 К началу страницы 
+ Ответить 
18192123
сообщение 16.10.2009 21:04
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 16.10.2009 21:14) *

Не-не-не... smile.gif Билдер - это тебе не Дельфи, тут вся работа происходит через OlePropertyGet/OlePropertySet/OleFuntion/OleProcedure... Вот так работает экспорт в Excel:

Ааа) Буду теперь знать! Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 2:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"