Страница 1 из 2

Отчеты в Excel

Добавлено: 15 ноя 2007, 13:56
hope
Добрый день!

Нужно в ячейке текст повернуть на 90 градусов - есть такая xl-функция?

Спасибо!

Добавлено: 15 ноя 2007, 14:30
edward_K
макрос вызовите да и все(проще держать его в шаблоне). А еще лучше прям в шаблоне формат ячейки поставить.

Добавлено: 15 ноя 2007, 15:21
hope
Понятно!
Ни с шаблонами, ни с макросами пока дело не имела - буду пробовать!

Добавлено: 15 ноя 2007, 15:28
edward_K
xlCreateFromTemplate вместо xlOpen и тока.

Добавлено: 15 ноя 2007, 16:06
hope
Еще вопрос: как узнать значения параметров функций, например, вид обрамления, выравнивание?

Вроде как в excel.inc - только где его взять?

Добавлено: 15 ноя 2007, 16:18
edward_K
ну в 810 он лежит в ...frm\galfrm.rar\inc\excel.inc.
в теории значения совпадают с справкой visual basic.
Все приводить много, вот кусочек :
// SetFontStyle
// Cell font style
xlBold = 1;
xlItalic = 2;
xlUnderline = 4;

// AlignCells, AlignCellsEx
// Cell value alignment
xlCenter = -4108;
xlLeft = -4131;
xlRight = -4152;
xlTop = -4160;
xlBottom = -4107;
xlFill = 5;
xlGeneral = 1;

// FrameCells
// Cell border styles
xlBorderL = 1;
xlBorderR = 2;
xlBorderT = 4;
xlBorderB = 8;
xlInsideH = 16;
xlInsideV = 32;
xlDiagonalD = 64;
xlDiagonalU = 128;

// нужные битики устанавливаются в порядке следования констант
xlEdgeLeft = 7;
xlEdgeRight = 10;
xlEdgeTop = 8;
xlEdgeBottom = 9;
xlInsideHorizontal = 12;
xlInsideVertical = 11;
xlDiagonalDown = 5;
xlDiagonalUp = 6;

// FrameCells
// line styles
xlContinuous = 1;
xlDash = -4115;
xlDashDot = 4;
xlDashDotDot = 5;
xlDot = -4118;
xlDouble = -4119;
xlSlantDashDot = 13;
xlLineStyleNone = -4142;

Добавлено: 15 ноя 2007, 16:23
hope
Спасибо, Edward!

Еще вопрос, как написать формулу, например '=СУММА(C3:C30)'?
В Галактике в коде все время используется номер столбца в виде цифры, а в формулу нужно засунуть в виде буквы.
Чтобы написать С3 - нужно перести номер столбца в его буквенное обозначение - так?

Добавлено: 15 ноя 2007, 17:09
edward_K
1. Если формула стоит в шаблоне, то она прекрасно сработает (если тока формат ячейки правильный и включен автопересчет формул).
2. Надо, либо в Excel поставте в параметрах стиль ссылок "R1C1" и посмотрите как в этом случае можно записывать формулу - не пробовал правда никогда так задавать. Я сумму все больше ручками считаю, а не Excel, либ см пункт 1.
3. Поглядите макросы из файлов exe\xlt - там много чего интересного найдете.

Добавлено: 15 ноя 2007, 18:09
m0p3e
Не смог найти где, но в свое время делал функцию возвращающую символьное представление столбца по его номеру.
Что-то типа
Function GetXLStrNum ( i : Word ) : String;
Begin
GetXLStrNum := chr ( i + 64 );
End;

Это если столбец до Z. Т.е. нужно еще дописать прокрутку для AA, AB и т.д.

Добавлено: 16 ноя 2007, 04:36
Hmyrii
пишем так и не паримся
xlSetCellFormula('=СУММА(С3:С30');

Добавлено: 19 ноя 2007, 03:05
ira
Стиль ссылок "R1C1" - (относительные и абсолютные) удобнее использовать, не нужно с буквами заморачиваться.

например :
xlSetCellFormula ('=СУММ(R[1]C:R'+string(wnstr)+'C',ws,wc,ws,wc);

Добавлено: 19 ноя 2007, 14:16
hope
Спасибо ВСЕМ!!!

Буквенное представление столбца достаю из строки:
Alphabetic:=' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ';
stolbez_name:=Trim(SubStr(Alphabetic, (stolbez-1)*3-2, 3)); //(спасибо Денису!)

Еще вопросы:
1. как вставить разрыв страницы?
2. как задать поля страницы: сверху, снизу, справа, слева?
3. для функции xlSetNumberFormat первым параметром в строке задается числовой формат шрифта. Что из себя должен/может представлять этот формат?
4. Вариантные массивы почему-то не работают...

Добавлено: 19 ноя 2007, 15:00
Den
По первым трем пунктам - excel---->Меню "Сервис"---->"Макрос"---->"Начать запись.." сия вещь поможет практически во всем при выводе отчета в excel-формат (xls)
Вариантные массивы точно работают. Проверьте повнимательнее границы диапозона массива и наполнение его и вывод его.

Добавлено: 20 ноя 2007, 08:22
hope
Я правильно понимаю последовательность действий:
1. создаю файл-шаблон xlt,
2. в нем создаю все макросы, которые мне понадобятся,
3. этот файл шаблон сохраняю в EXE\XLS\
4. в своей форме открываю этот файл-шаблон с помощью xlCreateFromTemplate
5. заполняю файл xls данными (это будет уже другой файл - не файл-шаблон???)
6. когда надо - выполняю макросы

Так?

И еще: Почему-то у меня не работает так:
name_f:='Pogr_List';
xlCreateExcelWithTemplate(name_f, True);
XlRes:=xlIsExcelValid;

Но зато работает так:
xlOpenNewExcel(true);

А Edward говорит, что наоборот вместо xlOpenNewExcel надо использовать xlCreateExcelWithTemplate???

(Версия 7.12)

Добавлено: 20 ноя 2007, 10:00
edward_K
в name_f нужно указывать полный путь.
я делаю так
#ifdef ATL51
if upcase(TranslatePath('%ClientRoot%') + '\OUT\'+UserName + '\')
<> upcase(GetStringParameter('Files','OutputFilesDirectory',0))
then kl3zvenka:=True ;
else kl3zvenka:=false ;
#ELSE
kl3zvenka:=false ;
#ENDIF
fbasname:=TranslatePath('%StartPath%XLS_ED\'+nmform)
if kl3zvenka
{ fbasname:=TranslatePath('%ClientRoot%\XLS_ED\'+nmform)

}
if fileexist(fbasname)
wPicture:=xlCreateExcelWithTemplate(fbasname,True) ;
else
wPicture:=xlCreateExcel(nmform,True) ;

папка другая чтобы не мешать галактические шаблоны с моими.