Выгрузка данных
Давай код - посмотрим
AnsiString Tert="", temp="";
Tert = "SELECT Client.CLT_NAME, Platezhc.M_PL, Platezhc.Y_PL, SUM( App_acc.PHONE_COUN ), Platezhc.SUMMA_PL, Platezhc.SR_SUMMA_P FROM Client.DB Client INNER JOIN PlatezhC.DBF Platezhc ON (Platezhc.CONTRACT_N = Client.CLT_CONTRA) INNER JOIN App_acc.DBF App_acc ON (App_acc.CONTRACT = Client.CLT_CONTRA) WHERE (Platezhc.M_PL LIKE '%";
Tert += ComboBox9->Text;
Tert += "%') AND ";
Tert += "(Platezhc.Y_PL LIKE '%";
Tert += ComboBox8->Text;
Tert += "%') ";
Tert += "GROUP BY Client.CLT_NAME, Platezhc.M_PL, Platezhc.Y_PL, Platezhc.SUMMA_PL, Platezhc.SR_SUMMA_P ORDER BY Client.CLT_NAME";
DataModule2->QueryTraf->SQL->Text = Tert;
//создаем страницу экселя
//и создаем шапку
app = CreateOleObject("Excel.Application");
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Add"));
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1); // Заголовок
range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
range.OlePropertySet( "ColumnWidth", 4.29);
range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",2);
range.OlePropertySet( "ColumnWidth", 80.29);
range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",3);
range.OlePropertySet( "ColumnWidth", 12.29);
range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",4);
range.OlePropertySet( "ColumnWidth", 12.86);
range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",5);
range.OlePropertySet( "ColumnWidth", 19.57);
cell = sheet.OlePropertyGet("Range", "A2:E2");
cell.OleFunction("Merge");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Size",18);
// -----------Заголовок-------------
temp = "Трафик за " + ComboBox9->Text + " " + ComboBox8->Text + " года";
cell.OlePropertySet("Value", StringToOleStr(temp));
// -----------Шапка-----------------
//range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
//range.OlePropertySet( "ColumnWidth", 15);
cell = sheet.OlePropertyGet("Range", "A4");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", "№№");
//range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
//range.OlePropertySet( "ColumnWidth", 52);
cell = sheet.OlePropertyGet("Range", "B4");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", "Наименование");
//range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
//range.OlePropertySet( "ColumnWidth", 13);
cell = sheet.OlePropertyGet("Range", "C4");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", "Кол-во прил.");
//range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
//range.OlePropertySet( "ColumnWidth", 13);
cell = sheet.OlePropertyGet("Range", "D4");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertySet("Value", "Общая сумма");
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
//range = sheet.OlePropertyGet("Columns").OlePropertyGet("Item",1);
//range.OlePropertySet( "ColumnWidth", 20);
cell = sheet.OlePropertyGet("Range", "E4");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", "Ср. трафик на 1 тел.");
//-------Заполнение данных---------------------------------
int num = 1,cellnum = 5,ColPr = 0;
float SummaPl = 0.0, SummaSrPl = 0.0;
DataModule2->QueryTraf->Open();
DataModule2->QueryTraf->First();
while (!DataModule2->QueryTraf->Eof)
{
cell = sheet.OlePropertyGet("Range", StringToOleStr("A" + IntToStr(cellnum)));
cell.OlePropertySet("Value", StringToOleStr(IntToStr(num)));
cell = sheet.OlePropertyGet("Range", StringToOleStr("B" + IntToStr(cellnum)));
cell.OlePropertySet("Value", StringToOleStr(DataModule2->QueryTrafCLT_NAME->AsString));
cell = sheet.OlePropertyGet("Range", StringToOleStr("C" + IntToStr(cellnum)));
cell.OlePropertySet("Value", StringToOleStr(DataModule2->QueryTraf->FieldByName("SUM OF PHONE_COUN")->AsString));
cell = sheet.OlePropertyGet("Range", StringToOleStr("D" + IntToStr(cellnum)));
cell.OlePropertySet("NumberFormat", "0,00");
cell.OlePropertySet("Value", StringToOleStr(DataModule2->QueryTrafSUMMA_PL->AsFloat));
cell = sheet.OlePropertyGet("Range", StringToOleStr("E" + IntToStr(cellnum)));
cell.OlePropertySet("NumberFormat", "# ##0,00");
cell.OlePropertySet("Value", StringToOleStr(DataModule2->QueryTrafSR_SUMMA_P->AsFloat));
SummaPl += DataModule2->QueryTrafSUMMA_PL->AsFloat;
SummaSrPl += DataModule2->QueryTrafSR_SUMMA_P->AsFloat;
ColPr += DataModule2->QueryTraf->FieldByName("SUM OF PHONE_COUN")->AsInteger;
DataModule2->QueryTraf->Next();
num++;
cellnum++;
}
//----------Подводим итоги----------------------------------
cell = sheet.OlePropertyGet("Range", StringToOleStr("B" + IntToStr(cellnum)));
cell.OlePropertySet("HorizontalAlignment", 1);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Size",11);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", "ИТОГО");
cell = sheet.OlePropertyGet("Range", StringToOleStr("D" + IntToStr(cellnum)));
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Size",11);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", StringToOleStr(SummaPl));
cell = sheet.OlePropertyGet("Range", StringToOleStr("E" + IntToStr(cellnum)));
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Size",11);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("NumberFormat", "# ##0,00");
cell.OlePropertySet("Value", StringToOleStr(SummaSrPl/(num-1)));
cell = sheet.OlePropertyGet("Range", StringToOleStr("C" + IntToStr(cellnum)));
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertyGet("Font").OlePropertySet("Size",11);
cell.OlePropertyGet("Font").OlePropertySet("Bold",true);
cell.OlePropertySet("Value", StringToOleStr(ColPr));
//-----------------------------------------------------------
app.OlePropertySet("Visible", 1);
app = Unassigned;
DataModule2->QueryTraf->Close();
я бы вместо
cell = sheet.OlePropertyGet("Range", StringToOleStr("A" + IntToStr(cellnum)));
написАл бы [COLOR=green]
String h = "A" + IntToStr(cellnum);
cell = sheet.OlePropertyGet("Range", h.c_str());
[/COLOR]
Во всяком случаее именно передавая чары я заполнял достаточно большие отчеты и никогда не косячилось ничего
И еще, поставь
app.OlePropertySet("Visible", 1); сразу после создания листа - так ты увидишь в каком месте у тебя косяк. Только когда лист будет заполняться программой не тыкай по нему мышкой - обсыпиться все
сказать трудно
я бы вместо
cell = sheet.OlePropertyGet("Range", StringToOleStr("A" + IntToStr(cellnum)));
написАл бы [COLOR=green]
String h = "A" + IntToStr(cellnum);
cell = sheet.OlePropertyGet("Range", h.c_str());
[/COLOR]
Во всяком случаее именно передавая чары я заполнял достаточно большие отчеты и никогда не косячилось ничего
И еще, поставь
app.OlePropertySet("Visible", 1); сразу после создания листа - так ты увидишь в каком месте у тебя косяк. Только когда лист будет заполняться программой не тыкай по нему мышкой - обсыпиться все
Попробал через чары.
Выдает ошибку при первом заполнении ячейки данными:
cell.OlePropertySet("Value", temp.c_str());
sql = "F"+IntToStr(index_EXCEL)+":G"+IntToStr(index_EXCEL);
cell = sheet.OlePropertyGet("Range", sql.c_str());
cell.OleFunction("Merge");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertySet("NumberFormat", "0,00");
cell.OlePropertySet("Value", otgr);
sql = "A"+IntToStr(index_EXCEL)+":A"+IntToStr(index_EXCEL+kol-1);
cell = sheet.OlePropertyGet("Range", sql.c_str());
cell.OleFunction("Merge");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
sql = Query1->Fields->Fields[0]->AsString;
cell.OlePropertySet("Value", sql.c_str());
((WideString)AnsiStringValue).c_bstr()
У меня так работает прекрассно передача в ворд.
Пользуй WideString :
((WideString)AnsiStringValue).c_bstr()
У меня так работает прекрассно передача в ворд.
Ничего, блин, не помогает! :-(
Вот код который у меня работает
sql = "F"+IntToStr(index_EXCEL)+":G"+IntToStr(index_EXCEL);
cell = sheet.OlePropertyGet("Range", sql.c_str());
cell.OleFunction("Merge");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
cell.OlePropertySet("NumberFormat", "0,00");
cell.OlePropertySet("Value", otgr);
sql = "A"+IntToStr(index_EXCEL)+":A"+IntToStr(index_EXCEL+kol-1);
cell = sheet.OlePropertyGet("Range", sql.c_str());
cell.OleFunction("Merge");
cell.OlePropertyGet("Borders").OlePropertySet("ColorIndex", 0);
cell.OlePropertySet("HorizontalAlignment", 3);
cell.OlePropertySet("VerticalAlignment", 3);
sql = Query1->Fields->Fields[0]->AsString;
cell.OlePropertySet("Value", sql.c_str());
Убрал в Параметрах оптимизацию кода и все заработал. Не пойму почему???