
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.26] |
![]() |
|
Сообщ.
#1
,
|
|
|
Подскажите как изменить параметры ячейки в Excel таблице (ширину, высоту, граници, шрифт, выравнивание, выставление курсива) Желательно средствами Delphi
Добавлено Можно и не средствами Delphi |
Сообщ.
#2
,
|
|
|
Уже столько раз спрашивалось.
![]() Открываешь Excel, запускаешь запись макроса, далешь с ячейкой все необходимые преобразования, останавливаешь запись макроса и смотришь полученный код на VB. После этого переносишь его в Делфи, с небольшими изменениями (типа поменять '(' на '[' и т.п.). |
Сообщ.
#3
,
|
|
|
Пробовал, но Delphi все время ругается.
Может подскажешь как преобразовать этот код ![]() ![]() Rows("7:7").Select Selection.Copy Rows("10:10").Select Selection.Insert Shift:=xlDown Добавлено Я открываю Excel через ![]() ![]() ExAppl := CreateOleObject('Excel.Application'); ExAppl.Application.EnableEvents := false; ExWorkbook := ExAppl.Workbooks.Open(FileName, EmptyParam,true,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); Result:=ExAppl; |
Сообщ.
#4
,
|
|
|
Думаю разберешся:
![]() ![]() procedure ExportToExcel(var ASheetRef: Variant); function GetCol(Col: integer): String; begin if Col<27 then Result := Chr(Col+64) else Result := Chr((Col div 26)+64)+ Chr((Col mod 26)+64) end; //function CellsToRange(Row1, Col1: Integer): String; overload; //var // S : String; //begin // S := GetCol(Col1)+IntToStr(Row1); // Result := S; //end; function CellsToRange(Row1, Col1, Row2, Col2: Integer): String; overload; var S : String; begin S := GetCol(Col1)+IntToStr(Row1)+':'+ GetCol(Col2)+ IntToStr(Row2); Result := S; end; procedure ExportTextView(var ASheetRef: Variant); const EXCEL_COL_ITEMS_WIDTH = 40; //width of first column (with items) EXCEL_COL_CODE_WIDTH = 5; //width of second column (with codes of items) EXCEL_COL_DATA_WIDTH = 11; //width of columns with data EXCEL_ROW_HEADLINES_HEIGHT = 40; //height of columns with headlines EXCEL_ROW_TWO_LINES_HEIGHT = 26; //height of cells with two lines of text EXCEL_DEFAULT_ROW_HEIGHT = 13; VERTICAL_TOP_ALIGNMENT = 1; HORIZONTAL_CENTER_ALIGNMENT = 3; HORIZONTAL_LEFT_ALIGNMENT = 2; EXCEL_FONT_NAME = 'Arial'; EXCEL_FONT_SIZE = 10; DATA_FORMAT = '# ###,0;(# ###,0);0,0'; var RowRef, ColRef: Variant; begin //set number format ASheetRef.Range[CellsToRange(5,3,45,PeriodCount + 2)].NumberFormat:=DATA_FORMAT; ASheetRef.Range[CellsToRange(50,3,86,PeriodCount + 2)].NumberFormat:=DATA_FORMAT; //set columns widths, firstly for all columns in the range ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].ColumnWidth:=EXCEL_COL_DATA_WIDTH; //then for some ColRef:=ASheetRef.Columns; ColRef.Columns[1].ColumnWidth:=EXCEL_COL_ITEMS_WIDTH; ColRef.Columns[2].ColumnWidth:=EXCEL_COL_CODE_WIDTH; //set rows height, firstly for all rows ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].RowHeight:=EXCEL_DEFAULT_ROW_HEIGHT; //then for some RowRef:=ASheetRef.Rows; RowRef.Rows[1].RowHeight:=EXCEL_ROW_HEADLINES_HEIGHT; RowRef.Rows[47].RowHeight:=EXCEL_ROW_HEADLINES_HEIGHT; RowRef.Rows[14].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT; RowRef.Rows[28].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT; RowRef.Rows[59].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT; RowRef.Rows[72].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT; RowRef.Rows[74].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT; //set font ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Font.Name:=EXCEL_FONT_NAME; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Font.Size:=EXCEL_FONT_SIZE; RowRef.Rows[1].Font.Bold:= True; RowRef.Rows[3].Font.Bold:= True; RowRef.Rows[19].Font.Bold:= True; RowRef.Rows[20].Font.Bold:= True; RowRef.Rows[43].Font.Bold:= True; RowRef.Rows[44].Font.Bold:= True; RowRef.Rows[45].Font.Bold:= True; RowRef.Rows[47].Font.Bold:= True; RowRef.Rows[49].Font.Bold:= True; RowRef.Rows[58].Font.Bold:= True; RowRef.Rows[59].Font.Bold:= True; RowRef.Rows[63].Font.Bold:= True; RowRef.Rows[64].Font.Bold:= True; RowRef.Rows[69].Font.Bold:= True; RowRef.Rows[70].Font.Bold:= True; RowRef.Rows[84].Font.Bold:= True; RowRef.Rows[85].Font.Bold:= True; RowRef.Rows[86].Font.Bold:= True; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].WrapText:=true; //set alignments ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].VerticalAlignment:=VERTICAL_TOP_ALIGNMENT; ASheetRef.Range['A1:A86'].HorizontalAlignment:=HORIZONTAL_LEFT_ALIGNMENT; ASheetRef.Range['A1:A3'].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[20,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[44,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[47,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[48,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[49,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[59,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[64,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[70,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; ASheetRef.Cells[85,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT; end;//ExportBalView //draws borders of cells; procedure DrawCellBorders(var ASheetRef: Variant); const EDGE_LEFT = 7; EDGE_TOP = 8; EDGE_BOTTOM = 9; EDGE_RIGHT = 10; INNER_VERTICAL = 11; INNER_HOR = 12; LINE_STYLE = 1; LINE_WIDTH = 2; begin ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_VERTICAL].Weight:=LINE_WIDTH; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_VERTICAL].LineStyle:=LINE_STYLE; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_HOR].Weight:=LINE_WIDTH; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_HOR].LineStyle:=LINE_STYLE; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_TOP].Weight:=LINE_WIDTH; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_BOTTOM].LineStyle:=LINE_STYLE; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_LEFT].Weight:=LINE_WIDTH; ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_RIGHT].LineStyle:=LINE_STYLE; end;//DrawCellBorders begin try ASheetRef.Name:='Name'; ExportTextView(ASheetRef); DrawCellBorders(ASheetRef); except ShowMessage('Error'); end; end; |
Сообщ.
#5
,
|
|
|
Я бы сделал что-то вроде такого:
![]() ![]() // вместо того что было у вас ExAppl := CreateOleObject('Excel.Application'); ExAppl.EnableEvents := false; ExAppl.Workbooks.Open(FileName := FileName, ReadOnly := True, ???:=0); // тут я не понял к какому параметру относится ваш 0 // то что вы не знали как ExAppl.ActiveSheet.Rows[7].Select; ExAppl.Selection.Copy; ExAppl.ActiveSheet.Rows[10].Select; ExAppl.Selection.Insert (Shift:=xlDown); или можно еще кажется так: ![]() ![]() // вместо того что было у вас ExAppl := CreateOleObject('Excel.Application'); ExAppl.EnableEvents := false; ExAppl.Workbooks.Open(FileName := FileName, ReadOnly := True, ???:=0); // тут я не понял к какому параметру относится ваш 0 // то что вы не знали как ExAppl.ActiveSheet.Rows[7].Copy; ExAppl.ActiveSheet.Rows[10].Insert (Shift:=xlDown); В общем, суть должна быть понятна. А остальное: 1 смотри автоматичеки записываемые макросы (похоже ты это уже научился); 2 хелп по VB, там очень хорошо описанна объектная модель Excel'а - методы, свойства и пр. Успеха. Добавлено to rapido: Мне кажется, что: ![]() ![]() ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)] ... можно записать без дополнительных функций преобразования: ![]() ![]() ASheetRef.Range[ASheetRef.Cells[1,1],ASheetRef.Cells[86,PeriodCount + 2]] ... Но это так, для эрудиции ![]() |