Форматування осередків в excel

форматування осередків в excel

Як програмно здійснити форматування осередків в excel (наприклад зробити осередок в текстовому форматі, змінити ширину стовпця і т.д.)







Колись давно займалася цією проблемою, ось шматочок коду,
напевно можна робити і якось по-іншому, це просто як варіант
відповіді на твоє запитання.

procedure TFMenu21.RadioButton5Click (Sender: TObject);
const
xlCenter = -4108;
XLWBatWorksheet = -4167; // для створення книги з однією сторінкою
Var
xl. OleVariant;
x, i, first. integer; // first для перейменування сторінки з ім'ям "Лист1"
x1, y1. integer; // для виділення діапазону в Excel
begin
try
// Excel вже запущений?
xl: = GetActiveOleObject ( "Excel.Application");
ShowMessage ( "У Вас вже завантажений Excel.Завершіте його роботу, а потім повторіть висновок");
xl.Application.WindowState: = - 4137;
//xl.Visible:=True;
xl.Quit;
xl: = Unassigned;
Exit;
except
// Ні, ще немає.
xl: = CreateOleObject ( "Excel.Application");
end;
xl.Workbooks.Add [XLWBatWorksheet];
// xl.Visible: = True;
first: = 1;
x1: = 0;
Y1: = 0;
For i: = 3 downto 1 do begin
x: = 2;
if first = 0 then xl.Workbooks [1] .Worksheets.Add else first: = 0;
If i = 1 then
begin
xl.Range [xl.Cells [x, 2], xl.Cells [x + 1,14]]. MergeCells: = True; // об'єднання осередків
xl.Range [xl.Cells [x, 2], xl.Cells [x + 1,14]]. WrapText: = True; // перенесення тексту
xl.Workbooks [1] .Worksheets [1] .Name: = "ім'я сторінки";

// Виводжу якусь шапку таблиці
x: = x + 1;
xl.Range [xl.Cells [x, 2], xl.Cells [x + 2,2]]. MergeCells: = True; // об'єднання осередків
xl.Cells [x, 2]: = "стовпчик 1";






xl.Range [xl.Cells [x, 3], xl.Cells [x + 1,4]]. MergeCells: = True; // об'єднання осередків
xl.Cells [x, 3]: = "стовпчик 2";
// Виводжу дані з Ttable (DM.TsvodD1) в Excel
DM.TSvodD1.Open;
DM.TSvodD1.First;
x1: = x; // запам'ятовую початкову рядок
While not DM.TSvodD1.Eof do
begin
xl.Workbooks [1] .WorkSheets [1] .Activate;
xl.ActiveWindow.DisplayZeros: = False; // НЕ показувати нулі
xl.ActiveWindow.DisplayGridlines: = False; // НЕ показувати сітку
// жирний шрифт xl.Range [xl.Cells [x, 2], xl.Cells [x, 2]]. Font.Bold: = True;
xl.Cells [x, 2]: = DM.TSvodD1F.Value;

if DM.TSvodD1T.Value = 1 then xl.Cells [x, 3]: = "<0.2";
if DM.TSvodD1T.Value = 2 then xl.Cells [x, 3]: = "0.2-0.3";
// if DM.TSvodD1T.Value = 3 then xl.Cells [x, 3]: = "> 0.3";
if DM.TSvodD1T.Value = 3 then xl.Cells [x, 3]: = "0.5";

xl.Range [xl.Cells [x, 7], xl.Cells [x, 7]]. NumberFormat: = "@"; // установка текстового формату для осередку
xl.Cells [x, 14]: = DM.TSvodD1Proc.Value;
x: = x + 1;
DM.TSvodD1.Next;
end; // while not TSvodD1.Eof
y1: = x-1; // запам'ятовую кінцеву рядок

// виводжу підсумки
xl.Workbooks [1] .WorkSheets [1] .Rows.Rows [x] .RowHeight: = 44.25; // висота рядка
xl.Range [xl.Cells [x, 2], xl.Cells [x, 14]]. WrapText: = True;

// форматує
xl.Workbooks [1] .worksheets [1] .Range [xl.Cells [1,2], xl.Cells [x, 14]]. VerticalAlignment: = 2;
xl.Workbooks [1] .worksheets [1] .Range [xl.Cells [x-3,2], xl.Cells [x, 14]]. HorizontalAlignment: = xlCenter; // виводити в центрі осередку
xl.Workbooks [1] .worksheets [1] .Range [xl.Cells [x-3,2], xl.Cells [x, 14]]. Font.Bold: = True;
xl.Workbooks [1] .worksheets [1] .Range [xl.Cells [x-3,3], xl.Cells [x-3,14]]. Borders.Weight: = 2;
// встановлюю ширину колонок
xl.Workbooks [1] .worksheets [1] .Columns.Columns [1] .ColumnWidth: = 2.43;
// межі осередку
xl.Workbooks [1] .worksheets [1] .Range [xl.Cells [x1,2], xl.Cells [y1,2]]. NumberFormat: = "0,0";
xl.Range [xl.Cells [x1,4], xl.Cells [y1,4]]. NumberFormat: = "0,0";

Можна зробити простіше, запусти Excel, запусти запис макросу і роби що тобі потрібно, то як ворматірованіе тексту, установка ширини осередку, та все що завгодно, а потім дивись що він там на генерував в Visual Basice.


> Валера (13.05.03 9:14

класний спосіб, я так теж роблю, але треба врахувати що код на VB буде відрізнятися: списком перемменних, об'єктів і властивостей, які доступні в Delphi. Але там праці більшого не складе розібратися що до чого.

Дякую Тетяна, спробую.







Схожі статті