Liss |
Отправлено: 19.06.2003, 18:16 |
|
Не зарегистрирован
|
В Дельфи можно было сделать так:
var
xlap,xl:variant;
i:integer;
begin
if SaveDialog1.Execute then
begin
XLap:= CreateOLEObject('Excel.Application');
xlap.workbooks.add;
XLap.visible := true;
xl:=xlap.Workbooks[1].Sheets[1];
i:=1;
Form1.Table1.First;
while not Form1.Table1.Eof do
begin
xl.Cells[i,1].Value:=Form1.Table1.FieldByName('Famil').AsString;
inc(i);
Form1.Table1.Next;
end;
xlap.ActiveWorkbook.SaveAs(SaveDialog1.FileName);
end;
При попытке сделать тоже в Buildere, не могу например:
xl:=xlap->Workbooks[1]->Sheets[1];
Как реализовать подобное, если есть пример киньте мылом пожалуйста:
slipatov@yandex.ru |
|
Гость_Nick |
Отправлено: 21.06.2003, 00:45 |
|
Не зарегистрирован
|
Если тебе это поможет, я работал так.
mExcel = Variant::CreateObject("excel.application");
mWorkBooks = mExcel.OlePropertyGet("workbooks");
Procedure Open("Open");
AnsiString fileName;
fileName = fileName.sprintf("%stemp\\%s",
aPatch.c_str(),
IBQ_ParamLoad->FieldByName("FILENAME")->AsString.c_str() );
bool openT;
mWorkBooks.Exec( Open << fileName.c_str());
mWorkBook = mExcel.OlePropertyGet("ActiveWorkbook");
// PropertySet Visibility("Visible");
// Visibility << True;
// mExcel.Exec(Visibility);
mWorkSheets = mWorkBook.OlePropertyGet("WorkSheets");
mActiveSheet = mWorkBook.OlePropertyGet("ActiveSheet");
int iNullKod = 0;
// --- хитрый вып насчет разной информации в одном листе
if ( IBQ_ParamLoadFIRSTSTR->Value> 0 ) iStr = IBQ_ParamLoadFIRSTSTR->Value;
else iStr -= IBQ_ParamLoadFIRSTSTR->Value;
PropertyGet Range("Range");
if ( IBQ_ParamLoadDATECELLSX -> Value == -1 ) cDate = Date();
else
if ( IBQ_ParamLoadDATECELLSX -> Value != -2 )
{
getDataR( IBQ_ParamLoadDATECELLSX->Value, IBQ_ParamLoadDATECELLSY->Value );
cDate = convertNormDate(bRange);
};
if ( IBQ_ParamLoadFIRSTSTR->Value != NULL )
while (iNullKod < 2 )
{
getDataR( IBQ_ParamLoadFN_TOVAR_ID->Value, iStr );
if ( bRange != "")
{
iNullKod = 0;
Application->ProcessMessages();
IBT_PNEW->Insert();
IBT_PNEWPRICES_ID->Value = -1;
IBT_PNEWPOSTAV_ID->Value = IBQ_ParamLoadPOSTAV_ID->Value;
IBT_PNEWTOVAR_ID->Value = mRange.OlePropertyGet("Value");
getDataR( IBQ_ParamLoadFN_NAME->Value, iStr );
IBT_PNEWNAME->Value = bRange;
if ( IBQ_ParamLoadFN_ARTICUL->Value != NULL )
{
getDataR( IBQ_ParamLoadFN_ARTICUL->Value, iStr );
IBT_PNEWARTICUL->Value = bRange;
};
Немного кривовато, это мой первый опыт работы с Excel из программы CBuilder 6 |
|
Гость_liss |
Отправлено: 21.06.2003, 16:59 |
|
Не зарегистрирован
|
Таким способом делал и я сам, тем более что есть примеры и уроки в разделе "Уроки" данного сайта, для меня именно была интересна конструкция
xl:=xlap->Workbooks[1]->Sheets[1];
|
|
iAlexander |
Отправлено: 24.06.2003, 17:41 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
А можно ли работать с листами Excel из 5-го Builder'a. Есть компоненты на закладке Server, но справка на них какая-то однообразная. Или же стоит ради такого дела переходить на Builder 6? |
|
Liss |
Отправлено: 24.06.2003, 17:50 |
|
Не зарегистрирован
|
>А можно ли работать с листами Excel из 5-го Builder'a.
Конечно можно, если хочешь напиши мне на мыло, я вышлю тебе пример, который будет работать с листами Excel, вообще без тех компонентов, которые есть на странице Servsers, кстати они в 6 перемещены на другую страницу.
slipatov@yandex.ru |
|
Admin |
Отправлено: 24.06.2003, 22:47 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Бросьте пример по этой ссылке.
Пароль: if5edU7dk4
А на C++Builder 6 конечно стоит переходить,
и не только из-за закладки Servers.
Отредактировано Admin — 24 Jun 2003, 22:49
|
|
NikolayB |
Отправлено: 25.06.2003, 06:54 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (iAlexander @ 24 Jun 2003, 17:41) | А можно ли работать с листами Excel из 5-го Builder'a. Есть компоненты на закладке Server, но справка на них какая-то однообразная. Или же стоит ради такого дела переходить на Builder 6? |
Variant XL, ExcelWorkBook, ExcelWorkSheet;
try{
try{
XL=GetActiveOleObject("Excel.Application");
}
catch(EOleSysError &ErrConnect)
{
XL=CreateOleObject("Excel.Application");
}
}
catch(EOleSysError &Err)
{
return false;
}
XL.OlePropertySet("Visible",true);
ExcelWorkBook=XL.OlePropertyGet("Workbooks");
if( CreateNewBook->Checked )
ExcelWorkBook.OleProcedure("Add");
else
ExcelWorkBook.OleFunction("Open", BookName);
ExcelWorkBook = XL.OlePropertyGet("ActiveWorkbook");
ExcelWorkSheet = XL.OlePropertyGet("ActiveSheet");
После чего пользуешь ExcelWorkSheet по своему усмотрению
|
|
iAlexander |
Отправлено: 25.06.2003, 15:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Спасибо.
Все, что нужно — создать на основе шаблона лист, повставлять в ячейки значения(кол-во ячеек заранее не известно), распечатать и закрыть.
Я в нете нарыл какой-то компонент — адрес
http://www.ems-hitech.com/excelreport/download.phtml, но он платный. |
|
Admin |
Отправлено: 25.06.2003, 16:45 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE |
Все, что нужно — создать на основе шаблона лист, повставлять в ячейки значения(кол-во ячеек заранее не известно), распечатать и закрыть.
|
Так посмотрите урок работы с шаблонами в Excel и пример:
http://www.cbuilder.ru/WinLesson/bles1_3.htm
|
|