Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

вывод отчета в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
1-61183
library
2002-09-08 03:59
2002.09.19
Создать ярлык для папки и поместить его в Пуск -> Документы.


3-60984
Olegus
2002-08-29 12:04
2002.09.19
TDataSet


3-60987
klik
2002-08-29 12:33
2002.09.19
Как удалить запись?


1-61041
sergey32
2002-09-06 17:30
2002.09.19
как установить время в DateTimePicker


4-61362
antonK
2002-07-24 12:51
2002.09.19
запуск DOS программы в Win95. окно не закрывается!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский