![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Код VBA в Дельфи для Excel [D7, XP]
Megabyte © (2006-10-12 13:37:00)Нужно сделать одинаковое выравнивание в отчете, кот. вывожу в Excel(там цифры выравниваются по одному краю, текст - по другому).
Записав макрос, выяснил, какие свойства следует прописать: HorizontalAlignment = xlRight, VerticalAlignment = xlCenter.
Не понятно, какому из объектов/классов присваивать это свойство: Sheet.Cells[1, 2], Sheet.Columns[1], Sheet.Range['a4'], Sheet.Range['b4', 'e4']???
Компилятор ругается:
"Нельзя присвоить свойство HorizontalAlignment класса такого-то..."
Megabyte (2006-10-17 12:08:00) [1]Спасибо. Просто модуль не подключил нужный(ExceXP). Не подумал об этом, т.к. другие настройки работали. :)
EvS (2006-10-16 18:05:00) [2]> xlCenter
вообще лучше использовать константы, определенные в Delphi, см. Excel97,Excel2000,ExcelXP.
И попробуй после
Sheet:= WorkBook.WorkSheets[1];
вставить
Sheet.Activate;
Megabyte (2006-10-16 17:28:00) [3]Или же я баклан, какой-то модуль не подключил.
Прямое присваивание xlCenter какого-то числового значения ничего не дает.
Megabyte (2006-10-16 17:27:00) [4]
> xlCenter - это число, а не строка. Уберите кавычки, и все заработает :)
Я пробовал и число подставлять, такая же фигня! Только надо определять xlCenter заранее, как числовую константу, иначе для Дельфи это непонятный идентификатор.
umbra (2006-10-16 17:07:00) [5]
> Sheet.Range['a1'].HorizontalAlignment := 'xlCenter';
xlCenter- это число, а не строка. Уберите кавычки, и все заработает :)
Megabyte (2006-10-16 16:01:00) [6]Я немного нагнал: Ругается не на этапе компиляции, а когда вызывается метод
Tfrm_itog.bbtn_excelClick
Megabyte (2006-10-16 15:55:00) [7]
procedure Tfrm_itog.bbtn_excelClick(Sender: TObject);
var
otchet, WorkBook, Sheet: Variant;
Dataset : TpFIBDataSet;
i, j, k : integer;
c, r : string;
begin
try
try
otchet:= CreateOleObject('Excel.Application');
otchet.SheetsInNewWorkbook:= 1;
WorkBook:= otchet.WorkBooks.Add;
Sheet:= WorkBook.WorkSheets[1];
DataSet:= TpFIBDataset(grd_result.DataSource.DataSet);
//да вот хотя бы так делаю
Sheet.Range['a1'].HorizontalAlignment := 'xlCenter';
//????????? ?????????
Sheet.Cells[1, 2].font.size := 15;
Sheet.Cells[2, 2].font.size := 13;
Sheet.Cells[1, 2].font.bold := true;
Sheet.Cells[2, 2].font.italic := true;
Sheet.Cells[1, 2].Value := cb_name.Text;
Sheet.Cells[2, 2].Value := now;
//????????? ???????? ?????
for j := 1 to 4 do
Sheet.Range['b4', 'e4'].Borders[j].LineStyle := 1;
{//???????? ??????? ?????????
Sheet.Cells[4, 1].Value := '?';}
for i:= 0 to grd_result.Columns.Count-1 do begin
//????????? ????? ????????
Sheet.Range['a4'].Rowheight := 20;
Sheet.Cells[4, i+2].font.bold := true;
//?????????? ???????? ?????
Sheet.Cells[4, i+2].Value := grd_result.Columns[i].Title.Caption;
end;
//????????? ?????? ????????
Sheet.Columns[1].ColumnWidth := 5;
Sheet.Columns[2].ColumnWidth := 30;
Sheet.Columns[3].ColumnWidth := 20;
Sheet.Columns[4].ColumnWidth := 20;
Sheet.Columns[5].ColumnWidth := 20;
//????????? + ????????? ???? ?????
DataSet.First;
For i := 1 to DataSet.RecordCount do
begin
for j := 1 to 4 do
begin
c := 'b' + IntToStr(4+i);
r := 'e' + IntToStr(DataSet.FieldDefs.Count+1);
Sheet.Range[c, r].Borders[j].LineStyle := 1;
end;
for k := 0 to Dataset.FieldCount-1 do
Sheet.Cells[i+4, k+2] := DataSet.FieldList.Fields[k].Value;
DataSet.Next;
end;
otchet.Visible:= true;
except
on E: Exception do
MessageBox(handle, PChar('??????? ????????? ?????? ? Excel ???????????'
+ '??????? :'#13#10+ E.Message+ #13#10'????????? ??????? Excel-?'
+ '?? ?????????? .') , '??????', MB_ICONERROR+MB_OK)
end;
finally
otchet:= Unassigned;
Screen.Cursor:= crDefault;
end;
end;
umbra (2006-10-16 14:04:00) [8]
> Компилятор ругается:
Т.е. Вы пользуетесьTExelApplicationи иже с ним. Я так и не смог в нем разобраться :), поэтому использую ОЛЕ. В качестве противоядия, можно создать книгу-шаблон со всеми форматированием и затем добавлять книги по этому шаблону.
EvS (2006-10-16 13:42:00) [9]
> Не понимаю, что делаю не так.
ну выложи свой код, может сообща найдем
Megabyte (2006-10-16 12:15:00) [10]Компилятор ругается:
"Нельзя присвоить свойство HorizontalAlignment класса Range"
:/
Не понимаю, что делаю не так. Остальные методы форматирования отчета(настройка шрифта, длины колонок и т.д.) в Excel нормально работают...
umbra (2006-10-16 10:17:00) [11]у меня следующий код работает без ошибок
uses ..., ComObj, Excel97, ...;
procedure TForm1.Button1Click(Sender: TObject);
var
XLApp, Sheet: variant;
begin
XLApp := CreateOleObject('excel.Application');
if VarIsClear(XLApp) then exit;
try
XLApp.SheetsInNewWorkBook := 1;
XLapp.Workbooks.Add;
Sheet := XLApp.Workbooks[1].Worksheets[1];
Sheet.Range['a1'].HorizontalAlignment := xlCenter;
Sheet.Range['a1:c52'].HorizontalAlignment := xlCenter;
finally
XLApp.Visible := true;
Xlapp := Unassigned;
end;
end;
Megabyte (2006-10-16 09:34:00) [12]При использовании Selectionругается:
"Method 'Selection' not supported by automation object".
Пример либо левый, либо не полный... :/
EvS (2006-10-12 17:39:00) [13]нашел на скорую руку:
http://delphiworld.narod.ru/base/excel_cells_span_and_text_align.html
Megabyte (2006-10-12 17:16:00) [14]
> Попробуйте сначала активировать нужный лист.
Что значит "активировать нужный лист"?
У меня всего один лист в отчете! Вставлял код выравнивания в различные этапы формирования отчета в экселе, даже после вывода на экран - результат один, как в [0].
umbra (2006-10-12 15:31:00) [15]
> какому из объектов/классов присваивать это свойство
присваивать надо объектуRangeи все ваши варианты должны работать. Попробуйте сначала активировать нужный лист.