Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

вывод отчета в EXCEL   Найти похожие ветки 

 
kserg@ukr.net   (2002-08-21 15:59) [0]

Привет.
Делаю вывод отчета в EXCEL через ComOBJ. Хочу придать отчету товарный вид. Но не знаю как команды VB перевести на паскаль.
Например, колонке с числами я хочу задать нужный формат
и центровку.
Внизу кусок макроса:
-------------------------------
Columns("D:D").Select
Selection.NumberFormat = "0.00"
With Selection
.HorizontalAlignment = xlRight
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
--------------------------

Мне не понятно, как задать
Columns("D:D").Select
Selection.NumberFormat = "0.00"


Пытался сам разобраться, но так и не понял, почему одна команда работы с ячейкой проходит, например
v.ActiveWorkBook.Sheets[1].Cells[1,1].Font.Bold:= true;

А вот эта команда для установки центровки - нет
v.ActiveWorkBook.Sheets[1].Cells[1,1]. HorizontalAlignment:= "xlCenter";


Спасибо


 
kserg@ukr.net   (2002-08-21 16:15) [1]

а всё таки...


 
kserg@ukr.net   (2002-08-21 16:55) [2]

Наверное надо работать через Range, но мне не понятно как делать ссылку на один столбец или одну строку.


 
Abu   (2002-08-21 17:12) [3]

1.Обращение к столбцу (например-установка ширины):

Sheet.Columns[1].ColumnWidth:=...
к строке
Sheet.Rows[1].RowHeight:=22.5
где
WorkBook:=Excel.WorkBooks[i]
Sheet:=WorkBook.WorkSheets[j]

2. Не проходит потому что надо подключить Excel2000 из
Program Files\Borland\Delphi5\Ocx\Servers
Там описаны костанты xlCenter и подобные.


 
kserg@ukr.net   (2002-08-21 17:24) [4]

>Abu (21.08.02 17:12)
спасибо, родной, что отозвался :)

насчет 2-го пункта "непроходимости"
v.ActiveWorkBook.Sheets[1].Cells[1,1]. HorizontalAlignment:= "xlCenter"

- вываливается ошибка Unable to set the HorizontalAlignment property of the Range class.

Может, я некорректно обращаюсь?


 
kserg@ukr.net   (2002-08-21 17:30) [5]

>Abu (21.08.02 17:12)
>2. Не проходит потому что надо подключить Excel2000
Согласен.
Проверил - открыл файл Excel97.pas посмотрел и подставил вместо символьной константы 16-тиричное значение: всё работает.

спасибо.


 
kserg@ukr.net   (2002-08-21 18:30) [6]

Народ, для полного счастья осталось только понять как можно отрисовать для выбранного диапазона ячеек сетку-обрамление


 
aus ©   (2002-08-22 01:21) [7]

точно так же, пиши макрос, смотри как и что...


 
fnatali ©   (2002-08-22 07:01) [8]

>Народ, для полного счастья осталось только понять как можно >отрисовать для выбранного диапазона ячеек сетку-обрамление

E.Range[E.cells[5,2],E.Cells[10,2]].wraptext:=true;


 
Mambet   (2002-08-22 07:10) [9]

Если нужны все границы ячеек, то помогает
Excel.Selection.Borders.LineStyle:=True;

Ну и для еще большего счатья, выравниваем ширину столбцов по содержимому.
Excel.Selection.Columns.AutoFit;


 
kserg@ukr.net   (2002-08-22 13:05) [10]

>Abu (21.08.02 17:12)
>2. Не проходит потому что надо подключить Excel2000 из
>Program Files\Borland\Delphi5\Ocx\Servers
>Там описаны костанты xlCenter и подобные.

>kserg@ukr.net (21.08.02 17:30)
>Проверил - открыл файл Excel97.pas посмотрел и подставил вместо >символьной константы 16-тиричное значение: всё работает.


...у одного из юзеров стоит ECXEL2000, соот-но константы от Е97 не проходят.
Народ, как сделать работу универсальной?


 
kserg@ukr.net   (2002-08-22 13:21) [11]

Народ, у кого стоит D6 - киньте мне файл на kserg@ukr.net
Delphi5\Ocx\Servers\excel2000.pas



 
vvm   (2002-08-22 18:03) [12]

V := WorkBook.WorkSheets[1]; // все переменные :Variant
Cell1 := V.Cells[3, 1];
// Правая нижняя ячейка области, в которую будем выводить данные
Cell2 := V.Cells[3, col+2];
RangeHead := V.Range[Cell1, Cell2];
RangeHead.VerticalAlignment := xlVAlignCenter;
RangeHead.HorizontalAlignment := xlVAlignCenter;
// RangeHead.WrapText := True; //если заголовки не умещаются по ширине столбца
RangeHead.Borders.Weight := xlMedium;//толщина линии
Cell1 := V.Cells[3, col];
Cell2 := V.Cells[3, col];
RangeHead.Borders.LineStyle := xlContinuous; // сплошная линия


 
ПИТОН   (2002-08-23 09:24) [13]

v.ActiveWorkBook.Sheets[1].Cells[1,1]. HorizontalAlignment:= "xlCenter " - Кавычек не надо


 
Lord Warlock ©   (2002-08-23 09:40) [14]

Посмотри
http://www.delphikingdom.com/helloworld/excelsm.htm

Что касается доступа к одной ячейки через Range, то

.Range["E3", EmptyParam].Value:="Строка";


 
konrads ©   (2002-08-23 11:08) [15]

В uses добавить ComObj
var
Form1: TForm1;
XL : variant; // Переменная в которой создаётся обьект EXCEL

Создание документа

// Обьект EXCEL
XL := CreateOleObject("Excel.Application");
// Чтоб не задавал вопрос о сохранении документа
XL.DisplayAlerts := false;
// новый документ
XL.WorkBooks.Add;
// или загружаем его
XL.WorkBooks.Open(MyDir + "\akt.xls");
{ MyDir - глобальная переменная типа string в неё помещаем путь
к каталогу запуска нашей програмы по событию FormCreate

procedure TForm1.FormCreate(Sender: TObject);
begin
GetDir(0,MyDir);
end;
я всегда так делаю, чтобы программу можно было в любой каталог
поместить вместе со своими дополнительными файлами, в этом случае путь
будет выбираться всегда правильно
}




// Делаем его видимым
XL.Visible := true;
// Левое и правое поля отступа для печати
XL.WorkBooks[1].WorkSheets[1].PageSetup.LeftMargin := 30;
XL.WorkBooks[1].WorkSheets[1].PageSetup.RightMargin := 10;
// Даём название страничке
XL.WorkBooks[1].WorkSheets[1].Name := "Прайс лист";
// Строка появляется на каждом листе при печати
XL.WorkBooks[1].WorkSheets[1].PageSetup.PrintTitleRows := "$3:$3";
XL.WorkBooks[1].WorkSheets[1].PageSetup.PrintTitleColumns := "$A:$A";
// формат числа
for i := 4 to 13 do
XL.WorkBooks[1].WorkSheets[1].Columns[i].NumberFormat := "0,00";
XL.WorkBooks[1].WorkSheets[1].Columns[4].NumberFormat := "0";

// Таким способом можно задавать ширину колонки
XL.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 4.5;
XL.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 50;
for i := 3 to 13 do
XL.WorkBooks[1].WorkSheets[1].Columns[i].ColumnWidth := 8;

// Шрифт жирный
XL.WorkBooks[1].WorkSheets[1].Rows[1].Font.Bold := True;
XL.WorkBooks[1].WorkSheets[1].Rows[1].Font.Color := clBlack;
XL.WorkBooks[1].WorkSheets[1].Rows[1].Font.Size := 16;
XL.WorkBooks[1].WorkSheets[1].Rows[1].Font.Name := "Times New Roman";
XL.WorkBooks[1].WorkSheets[1].Cells[1,4] := "Прайс лист";
// Выравнивам по центру по вертикали
XL.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := 2;
// Выравнивам по центру по горизонтали
XL.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := 3;
// Обьединяем ячейки
XL.WorkBooks[1].WorkSheets[1].Range["A1:D1"].Merge;

// Выравнивам по центру по вертикали
XL.WorkBooks[1].WorkSheets[1].Rows[3].VerticalAlignment := 2;
// Выравнивам по центру по горизонтали
XL.WorkBooks[1].WorkSheets[1].Rows[3].HorizontalAlignment := 3;
// Выравнивам по левому краю
XL.WorkBooks[1].WorkSheets[1].Cells[3,2].HorizontalAlignment := 2;
XL.WorkBooks[1].WorkSheets[1].Cells[3,3].HorizontalAlignment := 2;
// Выравнивам по правому краю
XL.WorkBooks[1].WorkSheets[1].Cells[3,4].HorizontalAlignment := 4;
XL.WorkBooks[1].WorkSheets[1].Rows[3].Font.Color := clBlack;
XL.WorkBooks[1].WorkSheets[1].Rows[3].Font.Name := "Times New Roman";
XL.WorkBooks[1].WorkSheets[1].Rows[3].Font.Size := 12;
XL.WorkBooks[1].WorkSheets[1].Rows[3].Font.Bold := True;
XL.WorkBooks[1].WorkSheets[1].Cells[3,1] := "№";
XL.WorkBooks[1].WorkSheets[1].Cells[3,2] := "Наименование продукции";
XL.WorkBooks[1].WorkSheets[1].Cells[3,3] := "Ед. изм.";

// обрисовка диапазона ячеек только снизу
// Borders[1] .... [4] - это края ячейки ColorIndex -4142 - пустой цвет i и n - переменные
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders.LineStyle := 1;
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders.Weight := 2;
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders[4].ColorIndex := 1;
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders[1].ColorIndex := -4142;
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders[2].ColorIndex := -4142;
XL.WorkBooks[1].WorkSheets[1].Range["A" + IntToStr(i) + ":" + chr(ord("C")+n) + IntToStr(i)].Borders[3].ColorIndex := -4142;

// обрисовка диапазона ячеек
XL.WorkBooks[1].WorkSheets[1].Range["A3:" + chr(ord("C")+n) + IntToStr(i)].Borders.LineStyle := 1;
XL.WorkBooks[1].WorkSheets[1].Range["A3:" + chr(ord("C")+n) + IntToStr(i)].Borders.Weight := 2;
XL.WorkBooks[1].WorkSheets[1].Range["A3:" + chr(ord("C")+n) + IntToStr(i)].Borders.ColorIndex := 1;

// присвоение ячейке значения

XL.WorkBooks[1].WorkSheets[1].Cells[i,j] := "К-во";

// Поворачивать слова, писать вертикально, под углом и т.д.

XL.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90;
XL.WorkBooks[1].WorkSheets[1].Range["A2:B2"].Orientation := 0;

Удачи


 
kserg@ukr.net   (2002-08-27 16:22) [16]

Спасибо всем, кто откликнулся. С вашей помощью порешил все вопросы.
Остался еще один :)
команда NumberFormat зависит от того, какой десятичн.разделитель установлен в RegionalSettings.
К примеру если DecimalSeparator="." то след.команда приводит к ошибке:
XL.Columns[1].NumberFormat:= "0,00";

Кто как с этим борется?


 
konrads ©   (2002-08-28 08:09) [17]

Привести всех к одному знаменателю :-)


 
Lord Warlock ©   (2002-08-28 09:16) [18]

или сделай так:

XL.Columns[1].NumberFormat:= "0"+DecimailSeparator+"00";




Страницы: 1 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
3-61008
Beer
2002-08-29 07:10
2002.09.19
Динамическая таблица по параметрам.


3-61024
Bishop
2002-08-30 09:58
2002.09.19
SQL


4-61366
Алексей К.
2002-07-30 22:31
2002.09.19
Как сделать форму, не сворачиваемую кнопкой


8-61224
Wadim
2002-05-22 00:30
2002.09.19
Media Player - проблемы (((


14-61299
AL2002
2002-08-23 23:36
2002.09.19
Есть у кого-то песня On The Bible группы Deuce?