Отчеты в Excel

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Отчеты в Excel

Сообщение hope »

Добрый день!

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

Спасибо!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

макрос вызовите да и все(проще держать его в шаблоне). А еще лучше прям в шаблоне формат ячейки поставить.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Понятно!
Ни с шаблонами, ни с макросами пока дело не имела - буду пробовать!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

xlCreateFromTemplate вместо xlOpen и тока.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

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

Вроде как в excel.inc - только где его взять?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение 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;
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Спасибо, Edward!

Еще вопрос, как написать формулу, например '=СУММА(C3:C30)'?
В Галактике в коде все время используется номер столбца в виде цифры, а в формулу нужно засунуть в виде буквы.
Чтобы написать С3 - нужно перести номер столбца в его буквенное обозначение - так?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1. Если формула стоит в шаблоне, то она прекрасно сработает (если тока формат ячейки правильный и включен автопересчет формул).
2. Надо, либо в Excel поставте в параметрах стиль ссылок "R1C1" и посмотрите как в этом случае можно записывать формулу - не пробовал правда никогда так задавать. Я сумму все больше ручками считаю, а не Excel, либ см пункт 1.
3. Поглядите макросы из файлов exe\xlt - там много чего интересного найдете.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

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

Это если столбец до Z. Т.е. нужно еще дописать прокрутку для AA, AB и т.д.
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Сообщение Hmyrii »

пишем так и не паримся
xlSetCellFormula('=СУММА(С3:С30');
ira
Посетитель
Сообщения: 47
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение ira »

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

например :
xlSetCellFormula ('=СУММ(R[1]C:R'+string(wnstr)+'C',ws,wc,ws,wc);
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение 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. Вариантные массивы почему-то не работают...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

По первым трем пунктам - excel---->Меню "Сервис"---->"Макрос"---->"Начать запись.." сия вещь поможет практически во всем при выводе отчета в excel-формат (xls)
Вариантные массивы точно работают. Проверьте повнимательнее границы диапозона массива и наполнение его и вывод его.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение 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)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение 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) ;

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