Форум » Clipper » Report from Clipper to Excel » Ответить

Report from Clipper to Excel

les: Есть Clipper-ный отчёт с упрощенной (для внутреннего употребления) шапкой, который Clipper автоматом перегоняет в Excel. Но налоговая хочет еметь его с очень навороченной шапкой ( http://webfile.ru/533208 ). На скорую руку склепал генерацию .html файла в стиле Excel. Работает, но прога внутри выглядит жутко, да и неудобно это клепать. Вопрос: как к этой шапке по-эллегантнее подгрузить данные из отчёта ( путём генерации из Clipper-а какого-либо скрипта и его запуска ).

Ответов - 44, стр: 1 2 3 All

Krosh: Может это поможет. Я использовал такой способ: 1. Clipper делает ТЕКСТОВЫЙ ФАЙЛ в виде форматированной пробелами таблицы (лучше без вертикальных разделителей столбцов, хотя можно и с ними, но их можно использовать в качестве разделителей, см. ниже) или ТЕКСТОВЫЙ ФАЙЛ с данными, разделёнными каким-либо символом разделителем, желательно таким, который не используется в текстовом представлении данных. Это может быть в простейщем случае запятая или ; $ #. Пример: 6211 332346 РУБ 15853.080 0.000 6211 456456 РУБ 0.000 11048.000 6211 023458 РУБ 98648.000 0.000 или 0011;000006;РУБ;1615853.080;0.000;739096811;1 0011;000007;РУБ;211048.000;0.000;738934901;1 0011;000008;РУБ;98648.000;0.000;738968054;1 0011;000009;РУБ;630462.000;0.000;738923079;1 0011;000010;РУБ;685899.000;0.000;738973451;1 2. Создаётся файл Excel с указанной СУПЕРШАПКОЙ и ПРОСТЫМ макросом, который 2.1. открывает указанный ТЕКСТОВЫЙ ФАЙЛ, причём его кодировка может бытьи 1251 и 866 (!) в указанном вами режиме - фиксированная ширина столбцов Пример: Workbooks.OpenText Filename:="C:\Temp\AAAA.txt", Origin:=866, StartRow:=1 _ , DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), Array(5, 9), Array(12, 2 _ ), Array(18, 9), Array(20, 2), Array(23, 9), Array(26, 9), Array(36, 2), Array(47, 9), Array _ (60, 2), Array(68, 9), Array(78, 1), Array(100, 1)), TrailingMinusNumbers:=True или в режиме "с разделителями" Workbooks.OpenText Filename:="C:\Temp\AAAA1.txt", Origin:=932, StartRow:= _ 1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, _ Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array( _ 3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 1)), TrailingMinusNumbers:=True 2.2. КОПИРУЕТ все строки с первой или со второй (если пропускаем заголовки столбцов) на страницу с шапкой. 2.3. Скопированное оформляется по вкусу (рамки, цвета, шрифты). Это РЕАЛЬНО быстрый способ. Если надо, могу подробнее.

_sergey: высё равно на оформление тоже много времени уйдёт (поцессорного), ведь, как я понял, оформление предполагается производить с использованием VBA?

Krosh: Нет, оформление тоже надо копировать из имеющегося где-то шаблона, например с другого листа. Сделать там нужное оформление первой строки после шапки, внутренних строк и "подвала". Главное не делать никаких программных циклов. Копировать не в цикле, а сразу для диапазона. Внутренние циклы Excel, реализованные внутри exe-шника работают существенно быстрее, чем VBA. Для того, чтобы понять сколько строк/столбцов надо копировать бес подсчёта в цикле есть спец. способ в Excel: Function mlast_row(bname, shname) mlast_row = Workbooks(bname).Worksheets(shname).Cells.SpecialCells(xlCellTypeLastCell).row End Function Function mlast_col(bname, shname) mlast_col = Workbooks(bname).Worksheets(shname).Cells.SpecialCells(xlCellTypeLastCell).Column End Function


_sergey: понятно. а отключение прорисовки листа не ускоряет заполение? я где-то видел команду типа Application.ScreenUpdating

Krosh: А то! И весьма! Application.ScreenUpdating = False выключил сделал Application.ScreenUpdating = True включил Увидел, прослезился

_sergey: тогды лучше Application.ScreenUpdating так и оставить =false

Юра: Лично я формирую отчеты в html, а потом просматриваю хоть в бровзере, хоть в Excel... Однако, с firefox (в отличие от IE) возникла проблема. Неверно обрезает страницы, переносит таблицу на следующую страницу, оставляя заголовок на предыдущей. Если есть знатоки, гляньте, может я несведущий забыл вставить какие-нибудь "заклинания". <HTML> <head> <title></title> <meta name="Author" CONTENT=""> <meta name="GENERATOR" CONTENT="TB2Html for CAVO"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"> <style> td {font-size:70%;COLOR: black;font-family:"Times New Roman"} .n {font-size:70%;color:#aa0000;font-weight:bold;font-family:"Times New Roman" } .m {font-size:75%;font-weight:bold;font-family:"Times New Roman" } .m1 { color:#AA0000; font-size: 10px;font-weight:bold;font-family: Verdana, Arial, Tahoma, Sans Serif;} </style> </head> <BODY BGCOLOR="" TEXT="black"> <center>ЗАТ СК "ПРОБА". Перiод 01.06.2001-30.06.2005</center><CENTER> ======= а то, что дальше переносит на следующую страницу в случае, если страниц больше одной ========= <TABLE BGCOLOR="silver" BORDER=2 FRAME=ALL CellSpacing=0 CellPadding=0 COLS=8> <CAPTION ALIGN=TOP><B> ЗВIТ ПРО НАДХОДЖЕННЯ СТРАХОВИХ ПЛАТЕЖIВ </B></CAPTION> <TR><Td COLSPAN=1 VALIGN=CENTER class=m> Група </Td> <Td COLSPAN=1 VALIGN=CENTER class=m> Код </Td> <Td COLSPAN=1 VALIGN=CENTER class=m>Вид страхування</Td> <Td COLSPAN=1 VALIGN=CENTER class=m>Сума платежiв</Td> <Td COLSPAN=1 VALIGN=CENTER class=m>Кiлькість</Td> <Td COLSPAN=1 VALIGN=CENTER class=m>Страхова сума</Td> <Td COLSPAN=1 VALIGN=CENTER class=m>На ведення справи</Td> <Td COLSPAN=1 VALIGN=CENTER class=m>% на ведення справи</Td> skip

dar: А где сейчас сайт Водоносова? Хочется тоже посмотреть эту программку прямого доступа к Екселю

Vlad04: Где и был http://vodonosov.nm.ru/develop/develop.htm Но он сейчас замороченный, но вопросы почти не реагирует

dar: Утром что-то не открывался, а сейчас работает

Wasily: Цитата: les пишет: _sergey пишет: цитатаИнтересно, как ты из прогарммы на клиппере создаёшь лист эекселя? нарисовал шапку руками, довавил строку с данными, отформатировал, сохранил в формате *.html, из Clipper-а по образу и подобию дописываю нужные данные и открываю в Excel. Геморойно, но работает довольно шустро. Зачем открывать html в Excel'e?????? Проще, скопировать..... Открываете Интернет Експлорером html, выделить все, копировать, перейти в Excel и вставить... обрамление и все. Я в такой способ делаю праткически со всеми отчетами (и внутренними и внешними.....) :-))))))))

subbota: Clip_msk.lib работает с Excel Смотри http://nova-mir.narod.ru

subbota: Clip_msk.lib работает с Excel Смотри http://nova-mir.narod.ru P.S. Почему-то многие ссылки ведут совсем не туда, куда указывают авторы вот и эта тоже http://vodonosov.nm.ru/develop/develop.htm

Dima: les пишет: Я некоторое время использовал этот метод - спасибо Водоносову. Потом отказался - совершенно нет форматирования отчета :( Кажется я нашел нормальный выход. Текст формируем в формате HTM (есть форматирование и все что надо и даже больше) И далее если по простому то так: Файлик сохраняем с расширением XLS swpruncmd(GetEnv("SYSTEMROOT")+"\system32\cmd.exe /c start test.xls" Excel его покажет как родной и внешне он ни чем не отличается если смотреть его через какой либо браузер. Пример [pre2] <HTML> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <CAPTION><B><Center>Типа тест</Center></B></CAPTION> <table border="1"> <tr style="font-weight:bold" bgcolor="#EEAEEE"> <td colspan="2" align="center">Итоги</td><td>&nbsp;</td> </tr> <tr style="font-weight:bold"> <td>Колонка1</td><td>Колонка2</td> <td>Колонка 3 </td> </tr> <tr> <td>данные1</td><td>данные 2</td><td>данные 3</td> </tr> <tr> <td>данные1</td><td>данные 2</td> <td>данные 3</td> </tr> <tr> <td>данные1</td><td>данные 2</td> <td>данные 3</td> </tr> </table> </HTML> [/pre2]

PSP: XML тоже в тему... :) Его и OpenOffice Calc без вопросов откроет.

Dima: PSP Примерчик покажешь , что бы можно было получить похожую табличку как в моем примере ? ЗЫ И чем потом его открыть что бы увидеть таблицу а не код в XML

PSP: Dima, в нете много примеров. Хотя бы ВОТ PS: переименованный в xls файл корректно открывает только Excel (как формат html, так и xml). OO Calc открывает эти файлы только с "правильным расширением".

Dima: PSP Пасиб

suv2: вставлю свои 5 копеек есть таблица xls, на первом листе - уже готовое оформление. на второй лист экспорируются данные из текстового файла, которые подготавливает программа. это могут быть как записи базы данных, так и отдельные конкретные числа и тд. Макрос на экселе откывает текст, экспортирует его содержимое на 2й лист, далее распихивает как надо по первому листу. Отключение прорисовки экрана (screenupdating=false) конечно же существенно ускоряет процесс. На хорошем компьютере эксель запускается в фоне, формирует + печатает форму и закрывается менее чем за секунду Тонкости. 1) На рабстанциях в экселе может быть установлен запрет на испольование макросов экселя, поэтому программа на клиппер предварительно проверяет эту установку и в случае необходимости пишет в реестр виндовс разрешение на использование макросов. 2) Поскольку программы могут выполняться на терминальном сервере, программа сначала копирует таблицу эксель и данные для нее из основной папки в уникальный для пользователя темповый каталог. Чтобы понять в каком каталоге нужно искать данные, в экселе есть соотв функции получения папки, в которой открыта таблица. 3) Способ "все отчеты через эксель" кроме прочего хорош тем, что позволяет без проблем печатать на локальном принтере из терминальной сессии на удаленном компьютере. Аналогичная печать из ДОС декларируется но не работает. Поэтому для печати отчетов, формирующихся в клиппер традиционным способом, мне пришлось писать сервер поддержки удаленной печати. Это заморочь, но иногда этого не избежать, например, если имеются мегабайты кода, который что-то там считает и постепенно выводит на принтер.

Dima: Krosh пишет: Application.ScreenUpdating = False выключил сделал Application.ScreenUpdating = True включил Что то разницы по времени работы я не увидел.



полная версия страницы