On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 156
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 30.10.18 12:24. Заголовок: Печать таблицы по шаблону ГОСТ


Добрый день!
Решил начать новую тему, т.к. мой случай это не простая печать таблицы. Хотя администратор может двинуть тему в вопрос dimao по своему усмотрению.
Задача состоит в том, чтобы по вот такому шаблону https://my-files.ru/tgwekj напечатать таблицу.
Проблема не только в том, что на каждой странице помимо основной таблицы надо печатать еще и таблицу строки которой расположены вертикально, а еще в том, что страниц отчета может быть больше сотни. Это подробный перечень деталей некоторого изделия.
Получается, что страница имеет заголовок, вертикальную таблицу-"боковик" и таблицу-подвал. "Боковик" и таблица-подвал состоят из постоянных данных.
Ну и поскольку ГОСТ, то все должно быть строго нужного размера, вплоть до толщины линий.
Посмотрел DBF_to_XLS_03 и DBF_to_DOC_03 от Андрея. Это сотню страниц шаблона делать в Word. А если 120 страниц?
Пример, \MiniGui\SAMPLES\Advanced\Tsb_Brw2xml впечатляет. Наверное, это то, что нужно. Но можно ли там (и как) печатать вертикальные таблицы параллельно с горизонтальными? И можно ли сразу задать параметры страницы для печати и сделать разбивку на страницы?
Любая помощь приветствуется. Заранее спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 15 [только новые]


постоянный участник




Пост N: 6099
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.10.18 12:34. Заголовок: TimTim пишет: Приме..


TimTim пишет:

 цитата:
Пример, \MiniGui\SAMPLES\Advanced\Tsb_Brw2xml впечатляет.


Пример классный, но если много данных, там тогда файл xml будет идти на гигабайты.
Эксель на компе пользователя тогда просто "помрёт"...

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1386
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.10.18 12:49. Заголовок: Andrey пишет: Приме..


Andrey пишет:

 цитата:
Пример классный, но если много данных, там тогда файл xml будет идти на гигабайты.
Эксель на компе пользователя тогда просто "помрёт"...



Много это сколько ? Миллион ? по несколько тысяч строк выгружаю , не помирает ничего , размер xml идет на МЕГОбайты

TimTim пишет:

 цитата:
Но можно ли там (и как) печатать вертикальные таблицы параллельно с горизонтальными? И можно ли сразу задать параметры страницы для печати и сделать разбивку на страницы?



Вертикальные столбцы поддерживаются , параметры страницы, разбивку и колонтирулы задаю последующим открытием через OLE и сохранением.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1387
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.10.18 13:17. Заголовок: Haz пишет: не помир..


Haz пишет:

 цитата:
не помирает ничего


специально тестанул
в поставку xmlxls от автора входит консольный пример , в нем задал 100 000 строк .
через 12 секунд был сформирован xml размером 162 МБ , Excel его открывает 10 секунд , не давится

сделал в 300 000 строк , формирование 30 сек и примерно столько же открытие в Excel , размер xml 487мб

а теперь вопрос , Кому потребуется выгрузка 300 000 строк и более в реальной жизни.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 157
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 30.10.18 15:00. Заголовок: Haz пишет: Вертикал..


Haz пишет:

 цитата:
Вертикальные столбцы поддерживаются , параметры страницы, разбивку и колонтирулы задаю последующим открытием через OLE и сохранением.


Радует, что это возможно, но теперь понять бы как.
Было бы здорово взглянуть на текст формирования вертикальной таблицы-боковика параллельно с основной таблицей и задание параметров страницы и т.д. через OLE. Это из [x]Harbour я никогда не делал.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1389
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.10.18 16:14. Заголовок: TimTim пишет: Было ..


TimTim пишет:

 цитата:
Было бы здорово взглянуть



гляди, не жалко
пример приблизителен просто поток текста накидал. В реале все конечно сложнее и красивее будет.


demo.prg
 

#require "hbxlsxml"

PROCEDURE Main()

LOCAL oXml, oSheet, cFile := "example.xml"
LOCAL i
LOCAL oObj
LOCAL nRow := 0
LOCAL cStr := ""


SET Date FORMAT 'DD.MM.YYYY'
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_CODEPAGE_UTF8

EXTERN hb_StrToUTF8

Set( _SET_DATEFORMAT, "dd.mm.yyyy" )

oXml := ExcelWriterXML():New( cFile )
oXml:setOverwriteFile( .T. )
oXml:setCodePage( "RU1251" )


oObj := oXml:addStyle( "Style1" )
oObj:alignRotate( 90 )
oObj:alignHorizontal( "Center" )
oObj:alignVertical( "Center" )
oObj:SetfontName( 'Arial' )
oObj:fontSize( 10 )
oObj:SetfontColor( "#C0C0C0")



oObj := oXml:addStyle( "Style2" )
oObj:Border( "All", 1, "Automatic", "Continuous" )
oObj:alignRotate( 90 )
oObj:alignHorizontal( "Center" )
oObj:alignVertical( "Center" )
oObj:SetfontName( 'Arial' )
oObj:fontSize( 10 )
oObj:SetfontColor( "#000000")



oObj := oXml:addStyle( "Style3" )
oObj:Border( "All", 2, "Automatic", "Continuous" )
oObj:alignHorizontal( "Center" )
oObj:alignVertical( "Center" )
oObj:alignWraptext()
oObj:SetfontName( 'Arial' )
oObj:SetfontSize( 10 )
oObj:setFontBold()


oObj := oXml:addStyle( "Style4" )
oObj:Border( "All", 1, "Automatic", "Continuous" )
oObj:alignHorizontal( "Center" )
oObj:alignVertical( "Center" )
oObj:alignWraptext()
oObj:SetfontName( 'Arial' )
oObj:SetfontSize( 10 )


oSheet := oXml:addSheet( "Plan1" )

oObj := oSheet
oObj:columnWidth( 1, 22 )
oObj:columnWidth( 2, 22 )
oObj:columnWidth( 3, 22 )
oObj:columnWidth( 4, 45 )
oObj:columnWidth( 5, 200 )
oObj:columnWidth( 6, 45 )
oObj:columnWidth( 7, 200 )

oObj:writeString( 1, 1, "Н.контроль / /" , "Style1" )
oObj:cellMerge( 1, 1, 0, 5 )


oObj:writeString( 1, 2, "перв. Применение" , "Style2" )
oObj:cellMerge( 1, 2, 0, 5 )

oObj:writeString( 1, 3, "" , "Style2" )
oObj:cellMerge( 1, 3, 0, 5 )


oObj:CellHeight( 1, 4, 40 )

oObj:writeString( 1, 4, "Поз. обозначение" , "Style3" )
oObj:writeString( 1, 5, "Наименование" , "Style3" )
oObj:writeString( 1, 6, "Кол" , "Style3" )
oObj:writeString( 1, 7, "Примечание" , "Style3" )

for i := 2 To 6

oObj:CellHeight( i , 4, 25 )

oObj:writeString( i, 4, "" , "Style4" )
oObj:writeString( i, 5, "" , "Style4" )
oObj:writeString( i, 6, "" , "Style4" )
oObj:writeString( i, 7, "" , "Style4" )
end

oXml:writeData( cFile )



RETURN


собирать так
call c:\MiniGui\batch\compile.cmd demo /c /l hbxlsxml

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 158
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 30.10.18 17:00. Заголовок: Ахренеть! В шоке. :s..


Ахренеть! В шоке.
Да это уже красиво и работает. Пошел изучать и дописывать.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 159
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 31.10.18 10:57. Заголовок: Привет! Никак не мог..


Привет!
Никак не могу пристроить еще одну вертикальную ячейку. После ячейки с "Перв.примен." должна идти ячейка с "Справ. №". Как бы я ее не пристраивал, например,

oObj:writeString( 1, 1, "Н.контроль / /" , "Style1" )
oObj:cellMerge( 1, 1, 0, 12 )

oObj:writeString( 1, 2, "перв. Применение" , "Style2" )
oObj:cellMerge( 1, 2, 0, 5 )

oObj:writeString( 2 /*7*/, 2, "Справ. №" , "Style2" )
oObj:cellMerge( 2 /*7*/, 2, 0, 5 )

при открытии в Excel пишет ошибку.

Метод cellMerge( row, col, width, height ) - объединение ячеек.
Первые два параметра номера строки и колонки. А как понять третий и четвертый?

В каких единицах задается ширина и высота ячеек и нельзя ли поменять единицы, скажем, в мм?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1390
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.10.18 12:28. Заголовок: TimTim пишет: Никак..


TimTim пишет:

 цитата:
Никак не могу пристроить еще одну вертикальную ячейку



Заполнение только слева направо и сверху вниз
TimTim пишет:

 цитата:
Метод cellMerge( row, col, width, height ) - объединение ячеек.
Первые два параметра номера строки и колонки. А как понять третий и четвертый?


третий и четвертый это насколько ячеек вправо и вниз объединть

TimTim пишет:

 цитата:
В каких единицах задается ширина и высота ячеек и нельзя ли поменять единицы, скажем, в мм?


Можно рассчитав коэф пересчета для себя однажды ( я примерно так и делаю )


Скрытый текст


Спасибо: 1 
ПрофильЦитата Ответить
moderator


Пост N: 1391
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.10.18 13:01. Заголовок: TimTim пишет: oObj:..


TimTim пишет:

 цитата:
oObj:writeString( 1, 2, "перв. Применение" , "Style2" )
oObj:cellMerge( 1, 2, 0, 5 )

oObj:writeString( 2 /*7*/, 2, "Справ. №" , "Style2" )
oObj:cellMerge( 2 /*7*/, 2, 0, 5 )

при открытии в Excel пишет ошибку.



Еще раз повторюсь , заполнение только последовательное сверху вниз, слева направо
после этого
oObj:writeString( 7, 2, "Справ. №" , "Style2" )
уже нельзя писать в строку меньше 7 и столбец меньше 2 в этой строке .

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 160
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 07.11.18 10:08. Заголовок: Haz пишет: Еще раз ..


Haz пишет:

 цитата:
Еще раз повторюсь , заполнение только последовательное сверху вниз, слева направо


Урок усвоил и почти закончил формирование документа.
Возникла еще одна проблемка. Формирования ячейки с разными типами линий на границах. По исходникам посмотрел вроде можно, но как? Поэкспериментировал - без успеха.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2127
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.11.18 12:06. Заголовок: TimTim пишет Формиро..


TimTim пишет
 цитата:
Формирования ячейки с разными типами линий на границах


 
METHOD ExcelWriterXML_Style:border( position, weight, color, linestyle )

LOCAL tmp

hb_default( @position, "All" ) // All, Left, Top, Right, Bottom, DiagonalLeft, DiagonalRight
hb_default( @weight, 1 ) // 0-Hairline, 1-Thin, 2-Medium, 3-Thick
hb_default( @color, "Automatic" ) // Automatic, 6-hexadecimal digit number IN "#rrggbb" format OR it can be any of the MS Internet Explorer named colors
hb_default( @linestyle, "Continuous" ) // None, Continuous, Dash, Dot, DashDot, DashDotDot, SlantDashDot, Double
работают эти параметры метода, т.е. создаете Style5, Style6, ... и применяете на ячейках
oObj := oXml:addStyle( "Style5" )
// oObj:Border( "All", 1, "Automatic", "Continuous" )
oObj:Border( "All", 1, "Automatic", "None" )
oObj:Border( "Left", 2, "Automatic", "Continuous" )
...


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 161
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 07.11.18 15:36. Заголовок: Спасибо SergKis ! По..


Спасибо SergKis ! Понял что делал не так
Теперь осталось сделать разбивку на страницы и задать ориентацию листа, поля, колонтитулы.
Это тоже можно делать в Xml-документе или это уже через Ole?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2128
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.11.18 17:22. Заголовок: TimTim пишет Это тож..


TimTim пишет
 цитата:
Это тоже можно делать в Xml-документе или это уже через Ole?


В xml нет управления печатью. Сам ole не использую.
Haz пишет
 цитата:
То чего нет, к примеру форматирование перед печатью я выполняю открыв xml через ту же ole



Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1396
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.11.18 20:37. Заголовок: TimTim пишет: Тепер..


TimTim пишет:

 цитата:
Теперь осталось сделать разбивку на страницы


Сегодня, весь день занят был. Спасибо Сергей подхватил тему.
Завтра постараюсь скинуть про Ole

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1397
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.11.18 16:59. Заголовок: Теперь осталось сдел..



 цитата:
Теперь осталось сделать разбивку на страницы


все не сложно, после сохранения файла XML открываем его OLE
  

oXml:writeData( cFile )
oExcel := win_oleCreateObject( "Excel.Application" )
oExcel:Visible := TRUE
oExcel:DisplayAlerts := FALSE
oExcel:Workbooks:Open(cFile)
oExcel:Sheets(1):Select()
oSheet := oExcel:ActiveSheet()

//включаем макросы и форматируем как надо
//смотрим что в макросе и после предыдущего кода пишем что надо
//к примеру так



oExcel:ActiveSheet:Outline:ShowLevels(1)
WITH OBJECT oExcel:ActiveSheet:PageSetup
:Zoom := FALSE
:FitToPagesWide := 1
:FitToPagesTall := 100
:LeftMargin := oExcel:Application:InchesToPoints(0.511811023622047)
:RightMargin := oExcel:Application:InchesToPoints(0.31496062992126)
:TopMargin = oExcel:Application:InchesToPoints(0.748031496062992)
:BottomMargin := oExcel:Application:InchesToPoints(0.748031496062992)
:HeaderMargin := oExcel:Application:InchesToPoints(0.31496062992126)
:FooterMargin := oExcel:Application:InchesToPoints(0.31496062992126)
:PrintHeadings := FALSE
:PrintGridlines := FALSE
:PrintComments := xlPrintNoComments
:PrintQuality := 600
:CenterHorizontally := FALSE
:CenterVertically := FALSE
:Orientation := xlLandscape
:Draft := FALSE
:PaperSize := xlPaperA4
:FirstPageNumber := xlAutomatic
:Order := xlDownThenOver
:OddAndEvenPagesHeaderFooter := FALSE
:DifferentFirstPageHeaderFooter := FALSE
:ScaleWithDocHeaderFooter := TRUE
:AlignMarginsHeaderFooter := TRUE
:RightFooter = "Пример нижнего колонтитула " + ' Страница &' + 'P из ' + '&' + 'N'
ENDWITH

// Можно показать перед печатью
oExcel:ActiveWindow:SelectedSheets:PrintPreview(TRUE)

// Можем сохранить как PDF
oExcel:ActiveSheet:ExportAsFixedFormat( xlTypePDF , GetMyDocumentsFolder() + "Отчет.pdf", xlQualityStandard, TRUE, TRUE,1 ,3, FALSE )

// После всего этого восстановим показ ошибок Excel, который ранее выключали
oExcel:DisplayAlerts := .T.




Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 600
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет