Текущий архив: 2006.10.29;
Скачать: CL | DM;
Вниз
Код VBA в Дельфи для Excel Найти похожие ветки
← →
Megabyte © (2006-10-12 13:37) [0]Нужно сделать одинаковое выравнивание в отчете, кот. вывожу в Excel(там цифры выравниваются по одному краю, текст - по другому).
Записав макрос, выяснил, какие свойства следует прописать: HorizontalAlignment = xlRight, VerticalAlignment = xlCenter.
Не понятно, какому из объектов/классов присваивать это свойство: Sheet.Cells[1, 2], Sheet.Columns[1], Sheet.Range["a4"], Sheet.Range["b4", "e4"]???
Компилятор ругается:
"Нельзя присвоить свойство HorizontalAlignment класса такого-то..."
← →
umbra © (2006-10-12 15:31) [1]
> какому из объектов/классов присваивать это свойство
присваивать надо объектуRange
и все ваши варианты должны работать. Попробуйте сначала активировать нужный лист.
← →
Megabyte © (2006-10-12 17:16) [2]
> Попробуйте сначала активировать нужный лист.
Что значит "активировать нужный лист"?
У меня всего один лист в отчете! Вставлял код выравнивания в различные этапы формирования отчета в экселе, даже после вывода на экран - результат один, как в [0].
← →
EvS © (2006-10-12 17:39) [3]нашел на скорую руку:
http://delphiworld.narod.ru/base/excel_cells_span_and_text_align.html
← →
Megabyte © (2006-10-16 09:34) [4]При использовании Selection ругается:
"Method "Selection" not supported by automation object".
Пример либо левый, либо не полный... :/
← →
umbra © (2006-10-16 10:17) [5]у меня следующий код работает без ошибок
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 12:15) [6]Компилятор ругается:
"Нельзя присвоить свойство HorizontalAlignment класса Range"
:/
Не понимаю, что делаю не так. Остальные методы форматирования отчета(настройка шрифта, длины колонок и т.д.) в Excel нормально работают...
← →
EvS © (2006-10-16 13:42) [7]
> Не понимаю, что делаю не так.
ну выложи свой код, может сообща найдем
← →
umbra © (2006-10-16 14:04) [8]
> Компилятор ругается:
Т.е. Вы пользуетесьTExelApplication
и иже с ним. Я так и не смог в нем разобраться :), поэтому использую ОЛЕ. В качестве противоядия, можно создать книгу-шаблон со всеми форматированием и затем добавлять книги по этому шаблону.
← →
Megabyte © (2006-10-16 15:55) [9]
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;
← →
Megabyte © (2006-10-16 16:01) [10]Я немного нагнал: Ругается не на этапе компиляции, а когда вызывается метод
Tfrm_itog.bbtn_excelClick
← →
umbra © (2006-10-16 17:07) [11]
> Sheet.Range["a1"].HorizontalAlignment := "xlCenter";xlCenter
- это число, а не строка. Уберите кавычки, и все заработает :)
← →
Megabyte © (2006-10-16 17:27) [12]
> xlCenter - это число, а не строка. Уберите кавычки, и все заработает :)
Я пробовал и число подставлять, такая же фигня! Только надо определять xlCenter заранее, как числовую константу, иначе для Дельфи это непонятный идентификатор.
← →
Megabyte © (2006-10-16 17:28) [13]Или же я баклан, какой-то модуль не подключил.
Прямое присваивание xlCenter какого-то числового значения ничего не дает.
← →
EvS © (2006-10-16 18:05) [14]> xlCenter
вообще лучше использовать константы, определенные в Delphi, см. Excel97,Excel2000,ExcelXP.
И попробуй после
Sheet:= WorkBook.WorkSheets[1];
вставить
Sheet.Activate;
← →
Megabyte © (2006-10-17 12:08) [15]Спасибо. Просто модуль не подключил нужный(ExceXP). Не подумал об этом, т.к. другие настройки работали. :)
Страницы: 1 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.031 c