Форум: "Базы";
Текущий архив: 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