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

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

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

:: MVP ::

:: RSS ::

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

Как получить значение диапазона ячеек из Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
var
  Arr: OleVariant;
begin
   Arr := E.ActiveWorkBook.WorkSheets[1].Range['A1:D4'].Value;
   if VarIsArray(Arr) then
   begin
      for i := VarArrayLowBound(Arr, 1) to VarArrayHighBound(Arr, 1) do
         for j := VarArrayLowBound(Arr, 2) to VarArrayHighBound(Arr, 2) do
            ShowMessage(Arr[i, j]);
   end;
   VarClear(Arr);
end;


Как проверить грамматику в выбранном диапазоне ячеек в Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   E.ActiveWorkBook.WorkSheets[1].Range['A1:D4'].CheckSpelling;
end;


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

var
  E: OleVariant;

// Для одного столбца
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.ActiveWorkBook.WorkSheets[1].Range['A1'].EntireColumn.AutoFit;
end;

// Для нескольких столбцов
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.ActiveWorkBook.WorkSheets[1].Range['A1:D4'].Columns.AutoFit;
end;


Как подогнать высоту строки/строк под содержимое?

var
  E: OleVariant;

// Для одной строки
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.ActiveWorkBook.WorkSheets[1].Range['A1'].EntireRow.AutoFit;
end;

// Для нескольких строк
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.ActiveWorkBook.WorkSheets[1].Range['A1:D4'].Rows.AutoFit;
end;


Как автоматически заполнить строку в Excel'е?

uses
  {..., Excel_TLB,} ActiveX;

// Constants for enum XlAutoFillType
type
  XlAutoFillType = TOleEnum;
const
  xlFillCopy = $00000001;
  xlFillDays = $00000005;
  xlFillDefault = $00000000;
  xlFillFormats = $00000003;
  xlFillMonths = $00000007;
  xlFillSeries = $00000002;
  xlFillValues = $00000004;
  xlFillWeekdays = $00000006;
  xlFillYears = $00000008;
  xlGrowthTrend = $0000000A;
  xlLinearTrend = $00000009;

var
  E: OleVariant;

// AutoFill будет работать, если в Range включить и копируемую строку, т.е.
// Sheet.Range['A20:T20', EmptyParam].AutoFill(Sheet.Range['A20:T25', EmptyParam], xlFillCopy);
// Т.е. 'A20:T20' - копируемая строка, 'A20:T25' - копируем в 5 след. строк, строка образец
// в этот диапозон тоже включена.
//
// XL.Range['исходный диапазон, т.е. та ячейка/ки, откуда ты берешь значение', EmptyParam].AutoFill
// (XL.Range['тот диапазон, который ты хочешь заполнить включая исодные ячейки', EmptyParam], xlFillDefault);
procedure TForm1.Button1Click(Sender: TObject);
begin
   E.Cells[1,2].Value := 1;
   E.Cells[2,2].Value := 2;
   E.Range['B1:B2'].Select;
   E.Selection.AutoFill(E.Range['B1:B10'], xlFillSeries);
end;

// Кроме того можно воспользоватся методами
// FillLeft, FillRight, FillUp, FillDown
// соблюдая описанное выше правило
procedure TForm1.Button2Click(Sender: TObject);
begin
   E.Sheets[1].Range['C3'].Value := 1;
   E.Sheets[1].Range['C3:A3'].FillLeft;
   E.Sheets[1].Range['C3:E3'].FillRight;
   E.Sheets[1].Range['C3:C1'].FillUp;
   E.Sheets[1].Range['C3:C5'].FillDown;
end;


Как записать массив значений в Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
var
  Arr: OleVariant;
begin
   Arr := VarArrayCreate([0, 3, 0, 3], varVariant);
   for i := VarArrayLowBound(Arr, 1) to VarArrayHighBound(Arr, 1) do
      for j := VarArrayLowBound(Arr, 2) to VarArrayHighBound(Arr, 2) do
         case i of
            0: Arr[j, i] := (i+1) * j;               // Целые значения
            1: Arr[j, i] := i / (j+1);               // Дробные значения
            2: Arr[j, i] := 'Строка ' + IntToStr(j); // Строковые значения
            3: Arr[j, i] := Now;                     // Дата/время
         end;
   E.ActiveWorkBook.WorkSheets[1].Range['A1:D4'] := Arr;
   VarClear(Arr);
end;


Как переименовать лист в Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   E.WorkSheets[1].Name := 'Новое имя';
end;


Как отформатировать текст в Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Форматирование текста в строках
   E.WorkSheets[1].Rows[1].Font.Bold := True;      // жирный
   E.WorkSheets[1].Rows[2].Font.Color := clRed;    // цвет красный
   E.WorkSheets[1].Rows[3].Font.Size := 14;        // размер 12
   E.WorkSheets[1].Rows[4].Font.Name := 'Courier'; //шрифт

   // Форматирование текста в колонках
   E.WorkSheets[1].Columns[1].Font.Bold := True;      //жирный
   E.WorkSheets[1].Columns[2].Font.Color := clRed;    // цвет красный
   E.WorkSheets[1].Columns[3].Font.Size := 14;        //размер 12
   E.WorkSheets[1].Columns[4].Font.Name := 'Courier'; //шрифт

   // Форматирование текста в ячейках
   E.WorkSheets[1].Cells[1, 1].Font.Bold := True;      //жирный
   E.WorkSheets[1].Cells[1, 2].Font.Color := clRed;    // цвет красный
   E.WorkSheets[1].Cells[1, 3].Font.Size := 14;        //размер 12
   E.WorkSheets[1].Cells[1, 4].Font.Name := 'Courier'; //шрифт
end;


Как задать формат числа в Excel?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Задаем формат числа для строки
   E{.WorkBooks[1]}.WorkSheets[1].Rows[1].NumberFormat := '0,0';

   // Задаем формат числа для колонки
   E{.WorkBooks[1]}.WorkSheets[1].Columns[1].NumberFormat := '0,00';

   // Задаем формат числа для ячейки
   E{.WorkBooks[1]}.WorkSheets[1].Cells[2, 2].NumberFormat := '0,000';
end;


Как повернуть текст на заданный угол?

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Поворот текста в первой строке
   E{.WorkBooks[1]}.WorkSheets[1].Rows[1].Orientation := 90;

   // Поворот текста в первом столбце
   E{.WorkBooks[1]}.WorkSheets[1].Columns[1].Orientation := 45;

   // Поворот текста в диапазоне ячеек
   E{.WorkBooks[1]}.WorkSheets[1].Range['A1:D4'].Orientation := -45;
end;

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