Главная страница
    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.49 MB
Время: 0.031 c
2-1161071989
sanich
2006-10-17 11:59
2006.10.29
Как перехватить удаление записи у TDBNavigator


2-1160382514
Volodya_
2006-10-09 12:28
2006.10.29
Excel->Delphi


15-1160141120
partizan
2006-10-06 17:25
2006.10.29
Посоветуйте книгу по криптографии


2-1160563288
Megabyte
2006-10-11 14:41
2006.10.29
FIB+, транзакции


9-1137814916
You are welcome
2006-01-21 06:41
2006.10.29
Ищется писатель сценария и игровых диалогов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский