На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Изменение параметров ячейки в Excel , (ширину, высоту, граници, шрифт, выравнивание)
    Подскажите как изменить параметры ячейки в Excel таблице (ширину, высоту, граници, шрифт, выравнивание, выставление курсива) Желательно средствами Delphi

    Добавлено
    Можно и не средствами Delphi
      Уже столько раз спрашивалось. <_< Поиск ведь для чего-то придумали.
      Открываешь Excel, запускаешь запись макроса, далешь с ячейкой все необходимые преобразования, останавливаешь запись макроса и смотришь полученный код на VB. После этого переносишь его в Делфи, с небольшими изменениями (типа поменять '(' на '[' и т.п.).
        Пробовал, но Delphi все время ругается.
        Может подскажешь как преобразовать этот код
        ExpandedWrap disabled
              Rows("7:7").Select
              Selection.Copy
              Rows("10:10").Select
              Selection.Insert Shift:=xlDown


        Добавлено
        Я открываю Excel через

        ExpandedWrap disabled
             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;
          Думаю разберешся:

          ExpandedWrap disabled
            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;
            Я бы сделал что-то вроде такого:
            ExpandedWrap disabled
              // вместо того что было у вас
              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);


            или можно еще кажется так:
            ExpandedWrap disabled
              // вместо того что было у вас
              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:
            Мне кажется, что:
            ExpandedWrap disabled
              ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)] ...

            можно записать без дополнительных функций преобразования:
            ExpandedWrap disabled
              ASheetRef.Range[ASheetRef.Cells[1,1],ASheetRef.Cells[86,PeriodCount + 2]] ...

            Но это так, для эрудиции :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0349 ]   [ 16 queries used ]   [ Generated: 2.08.25, 03:01 GMT ]