FAQ VCL
Работа с MS Office\Word

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как сделать автоперенос строк в ячейке/на всем листе?

var
  E: OleVariant;

// В ячейке
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.ActiveSheet.Range['A1'].WrapText := True;
   E.ActiveSheet.Range['A1'].EntireRow.AutoFit;
end;

// На всем листе
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Cells.Select; // Выдаляем все ячейки на листе
   E.Selection.WrapText := False; 
end;


Как скрыть/показать линии между строками и столбцами?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Скрыть линии
   E.ActiveWindow.DisplayGridlines := False;
   // Показать линии
   E.ActiveWindow.DisplayGridlines := True;
end;


Как скрыть/показать заголовки строк и столбцов?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Скрыть заголовки
   E.ActiveWindow.DisplayHeadings := False;
   // Показать заголовки
   E.ActiveWindow.DisplayHeadings := True;
end;


Как сгруппировать/разгруппировать несколько строк?

// Способ первый
var
  E: OleVariant;
 
// Сгруппировать
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Selection.Rows.Group;
end;
 
// Разгруппировать
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Selection.Rows.Ungroup;
end;

// Способ второй
var
  E: OleVariant;
 
// Сгруппировать
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Range['A1:A4'].Rows.Group;
end;
 
// Разгруппировать
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Range['A1:A4'].Rows.Ungroup;
end;


Как сгруппировать/разгруппировать несколько столбцов?

// Способ первый
var
  E: OleVariant;
 
// Сгруппировать
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Selection.Columns.Group;
end;
 
// Разгруппировать
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Selection.Columns.Ungroup;
end;

// Способ второй
var
  E: OleVariant;
 
// Сгруппировать
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Range['A1:D1'].Columns.Group;
end;
 
// Разгруппировать
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Range['A1:D1'].Columns.Ungroup;
end;


Как динамически создать функцию в документе Excel, вызвать ее и вернуть значение через параметр?

uses
  {...,} ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  E, B: OleVariant;
  i: OleVariant;
  SomeStr: OleVariant;
begin
   E := CreateOleObject('Excel.Application');
   B := E.Workbooks.Add;
   E.Visible := True;

   i := E.VBE.ActiveVBProject.VBComponents.Count;
   E.VBE.ActiveVBProject.VBComponents.Add(1);
   // Добавляем в модуль книги код на VB
   B.VBProject.VBComponents.Item(i+1).CodeModule.InsertLines(1, 'Function Test(ByRef p)');
   B.VBProject.VBComponents.Item(i+1).CodeModule.InsertLines(2, '   Range("A2").Select');
   B.VBProject.VBComponents.Item(i+1).CodeModule.InsertLines(3, '   ActiveCell.FormulaR1C1 = p');
   B.VBProject.VBComponents.Item(i+1).CodeModule.InsertLines(4, '   p = "123"');
   B.VBProject.VBComponents.Item(i+1).CodeModule.InsertLines(5, 'End Function');

   SomeStr := 'qwerty';
   E.Application.Run('Test', SomeStr);

   ShowMessage(SomeStr);

   B.Close;
   B := Unassigned;
   E.Quit;
   E := Unassigned;
end;


Как активировать лист рабочей книги Excel?

// Способ первый
uses
  {...,} ComObj;

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   E := CreateOleObject('Excel.Application');
   E.WorkBooks.Add;
   E.Visible := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if not VarIsEmpty(E) then
   begin
      E.Quit;
      E := Unassigned;
   end;
end;

// Само переключение
procedure TForm1.Button3Click(Sender: TObject);

  function FindListIndex(ListName: string): Integer;
  var
    i: Integer;
  begin
     Result := 0;
     for i := 1 to E.ActiveWorkbook.Sheets.Count do
        if AnsiLowerCase(E.ActiveWorkbook.Sheets.Item[i].Name) = AnsiLowerCase(ListName) then
           Exit(i);
  end;

var
  Index: Integer;
begin
   Index := FindListIndex('Лист2');
   if Index > 0 then
      E.ActiveWorkbook.Sheets.Item[Index].Activate;
end;

// Способ второй
uses
  {...,} ComObj;

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   E := CreateOleObject('Excel.Application');
   E.Workbooks.Add;
   E.Visible := True;

   E.Sheets['Лист2'].Activate; // Само переключение
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if not VarIsEmpty(E) then
   begin
      E.Quit;
      E := Unassigned;
   end;
end;


Как сделать фильтр по колонке?

uses
  {...,} ComObj;

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   E := CreateOleObject('Excel.Application');
   E.Workbooks.Add;
   E.Range['A1:A9'].Value := 'sss';
   E.ActiveSheet.Rows[1].AutoFilter; // AutoFilter для A1
   E.Visible := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if not VarIsEmpty(E) then
   begin
      E.Quit;
      E := Unassigned;
   end;
end;


Как залить весь лист цветом/убрать заливку?

var
  E: OleVariant;

// Заливка всего листа
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Cells.Select; // Выдаляем все ячейки на листе

   E.Selection.Interior.Pattern := 1; // xlSolid;
   E.Selection.Interior.PatternColorIndex := -4105; // xlAutomatic;
   E.Selection.Interior.Color := 5287936;
   E.Selection.Interior.TintAndShade := 0;
   E.Selection.Interior.PatternTintAndShade := 0;
end;

// Удаление заливки со всего листа
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Cells.Select; // Выдаляем все ячейки на листе

   E.Selection.Interior.Pattern := -4142; // xlNone
   E.Selection.Interior.TintAndShade := 0;
   E.Selection.Interior.PatternTintAndShade := 0;
end;


Как изменить масштаб на листе?

var
  E: OleVariant;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.ActiveWindow.Zoom := 110;
end;

При использовании материала - ссылка на сайт обязательна