Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.028 c
2-1160628993
Serg_e
2006-10-12 08:56
2006.10.29
Как заставить работать tab MDIChild-форме?


2-1161019593
DROWSY
2006-10-16 21:26
2006.10.29
SQL?


2-1160760529
anton773
2006-10-13 21:28
2006.10.29
фокус ввода


2-1160720820
kolj
2006-10-13 10:27
2006.10.29
Робота с MS Word


15-1160492282
AntiUser
2006-10-10 18:58
2006.10.29
СтОит ли облегчать конструкцию.