Форум » [x]Harbour » Снова EXCEL (продолжение) » Ответить

Снова EXCEL (продолжение)

Dima: Ранее с Excel из Harbour ни когда не работал. Поставили тут задачу. У некоторых поставщиков есть определенные формы заказов. Набраны они в Excel. Сейчас народ руками заполняет эти формы и шлет по электронке поставщикам. Задача сводится к тому что бы в этих формах находить нужные коды товара и в нужной ячейке проставлять заказ. Может ткнет кто носом с чего начать что бы не напороться на грабли. Спасибо Сами формы тут http://zalil.ru/33279066

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Oskar_AAA: Добрый день, коллеги. Dima, если есть права админа, то работает корректно. Пробовали 2 раза и оба раза все ОК. Haz - Если просто конвертить dbf в xlsx, забудьте про OLE. Посмотрите на xlsxml. В разы быстрее и не зависит от капризов екселя. - где можно скачать итд?

Oskar_AAA: Немного о проекте. Продукт для банка (аналитика), 1996 год начало (Clipper5.1). Сейчас более 60 DBF (для примера. проводки 10 млн. 4ГБ, остатки по счетам 6 млн. 600 МБ, курсы валют, филиалы, клиенты итд). За операционный день импорт данных (в среднем) данные: 272 тыс.счетов, 8 тыс. остатков по балансу филиалов, 120 тыс.проводок, 236 тыс. клиентов итд.... Использую тандем с 2011 года: 1. обработка данных и выгрузка во временный DBF(ы) 2. Excel - конвертация в Xlsx, форматирование, цвета, шрифты итд, загрузка макета(ов) и запись временного Xlsx 3. Excel - загрузка макета(ов) отчета и копирование из временного Xlsx. PS: Версия программы 2005 года (xharbour), 106 млн проводок, 95 млн. остатки по счетам, 15ГБ.... на LETODB переводил в 2006 году, но остановился (ушел с банковской тематики, сейчас вернулся...)

Oskar_AAA: Haz - Всё настроишь, все работает и вдруг через год или два валится на pagesetup или printquality это из последних. Часто на формат данных вдруг ругаться начинает. На копи пасте из одного листа в другую книгу, где то на сотом цикле может рухнуть.. Да и в целом очень зависимый механизм от версии офиса. При этом если произошла ошибка эусель как правило зависает в пямяти процессом и срубается только диспетчером тк так его не видно Один в один, аналогичная ситуация...


SergKis: Oskar_AAA http://clipper.borda.ru/?1-4-80-00001250-000-0-0-1541685579

SergKis: PS hb -> \core-master\extras\hbxlsxml/*.*

Haz: Oskar_AAA пишет: где можно скачать итд? Сергей уже указал правильное направление напишу примерчик конвертации DBF2XML ( XML этот такой же родной для EXCEL как и XLSX ) в примере конвертил CUSTOMER.DBF из поставки минигуи , но привязки к структуре нет , можно пихнуть любой другой ( на мемополя проверку тоже не делал ) [pre2] #require "hbxlsxml" REQUEST DBFCDX, DBFFPT PROCEDURE Main() LOCAL oXml, oSheet, cFile := "customer.xml" LOCAL n,oStyle LOCAL aStr := {} LOCAL cType := "" RDDSETDEFAULT('DBFCDX') Set CENTURY ON Set Deleted ON Set Date GERMAN 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" ) USE ("CUSTOMER.DBF") SHARED NEW ALIAS "CUSTOMER" aStr := CUSTOMER->(DBSTRUCT()) // Создаем объект XML oXml := ExcelWriterXML():New( cFile ) oXml:setOverwriteFile( .T. ) oXml:setCodePage( "RU1251" ) // Определяем Лист oSheet := oXml:addSheet( "Sheet1" ) // Определяем стиль названия отчета oStyle := oXml:addStyle( "Title" ) oStyle:alignHorizontal( "Left" ) oStyle:alignVertical( "Center" ) oStyle:SetfontName( 'Arial' ) oStyle:SetfontSize( 12 ) oStyle:setFontBold() //Определяем стили шапки колонок oStyle := oXml:addStyle( "HDR" ) oStyle:Border( "All", 2, "Automatic", "Continuous" ) oStyle:alignHorizontal( "Center" ) oStyle:alignVertical( "Center" ) oStyle:alignWraptext() oStyle:setFontBold() oStyle:alignWraptext() // Определяем стили колонок cAlign := "Left" for n := 1 TO Len( aStr ) cType := aStr[n][2] switch cType Case "D" cAlign := "Center" Exit Case "C" cAlign := "Left" Exit Case "N" cAlign := "Right" Exit end Switch oSheet:columnWidth( n, aStr[n][3] * 8 ) oStyle := oXml:addStyle( "F" + NToC(n) ) oStyle:Border( "All", 1, "Automatic", "Continuous" ) oStyle:alignHorizontal( cAlign ) oStyle:alignVertical( "Center" ) oStyle:fontSize( 10 ) next // Пишем название отчета nRow := 1 oSheet:writeString( nRow, 1, "Пример выгрузки DBF2XML " , "Title" ) // Пишем шапку nRow++ nRow++ For n := 1 To Len( aStr ) oSheet:writeString( nRow, n, aStr[n][1] , "HDR" ) End oSheet:cellHeight( nRow, 1, 22 ) nRow++ //Данные While !CUSTOMER->(eof()) oSheet:cellHeight( nRow, 1, 15 ) For n := 1 To CUSTOMER->(FCOUNT()) uData := CUSTOMER->(FieldGet(n)) cType := ValType( uData ) switch cType Case "N" oSheet:writeNumber( nRow, n, uData, "F" + NToC(n) ) Exit Case "C" oSheet:writeString( nRow, n, uData, "F" + NToC(n) ) Exit Case "U" oSheet:writeString( nRow, n, '', "F" + NToC( n) ) Exit Case "T" oSheet:writeDateTime( nRow, n, hb_Ttoc(uData), "F" + NToC( n) ) Exit Case "D" oSheet:writeDateTime( nRow, n, Dtoc(uData), "F" + NToC( n) ) Exit Case "L" oSheet:writeString( nRow, n, IIF(uData, 'да' , 'нет'), "F" + NToC( n) ) Exit End Switch Next CUSTOMER->(dbSkip(1)) nRow++ End oXml:writeData( cFile ) RETURN [/pre2].

Haz: Oskar_AAA пишет: где можно скачать итд? только компилировать с библиотекой из поставки минигуи, она к русскому языку приучена.

Pasha: xlsxml конечно работает в разы быстрее, чем ole, но подходит для ограниченного круга задач. Скажем сейчас мне надо выбрать данные из почти 300 таблиц xls, похожей, но различной структуры. Делаю средствами ole. Долговато, но время здесь некритично, это разовая выборка данных для дальнейшей конвертации. Или типовая задача: скачать бланк документа с сайта, пометить в нем ячейки и заполнить его данными. xlsxml тут никак не подходит.

Haz: Pasha пишет: xlsxml тут никак не подходит. Не подходит для этой цели. Xlsxml это вывод. Для чтения или OLE или ado/odbc если читаем простую таблицу. Если нужно прочесть сложный отчёт в Excel, то пока только OLE. Соглашусь, что не хватает альтернативы тормознутому OLE. Есть коммерческие библиотеки, но не все готовы за них платить ради разовой задачи

SergKis: Pasha пишет Делаю средствами ole. Долговато, но время здесь некритично, это разовая выборка данных для дальнейшей конвертации. Или типовая задача: скачать бланк документа с сайта, пометить в нем ячейки и заполнить его данными. Можно не использовать ole, о получать xml и разбирать его. Для похожих таблиц - тоже однотипная операция. Данные бланков то же могут быть и в xml и json, этого становится больше (xls[x] уже почти не встречается), а xlsxml со своей задачей справляется

Haz: SergKis пишет: Можно не использовать ole, о получать xml и разбирать его. тоже думал над этим вопросом, но получить xml из excel можно не совсех версий Excel. До xlsx БЫЛ двоичный BIFF, потом XML. OLE наплевать на версию и работает везде, но работает медленно и капризно. Json бесспорно удобнее xml, получить хеш массив и делать то ничего не надо, все уже разложено по ключам. Жаль не все его дают, а как пишет Паша - скачай бланк и заполни.

SergKis: Haz пишет получить xml из excel можно не совсех версий Excel. До xlsx БЫЛ двоичный BIFF, потом XML. OLE наплевать на версию и работает везде, но работает медленно и капризно. Уже не помню таких версий. И если бы ole не имела глюков, особенно на компах клиентов, где чужие админы, то не возникали бы вопросы, которые выше. С xml все надежнее и в сети все больше данные только в xml или json (и можно выбрать вариант). С json проще, его и выбираешь и бланков xls[x] по обмену данными уже нет, если только сам разрабатываешь и применяешь в технологии обмена.

Haz: SergKis пишет: Уже не помню таких версий А они есть В остальном согласен. json лидирует, за ним xml и в конце этого паравоза устаревший обмен ввиде "скачай и заполни". Изначально тема была как быстро выгрузить в Excel, ответ- xlsxml. Как по мелочам допилить красоту, ответ - ole ( тк вывод в xlsxml, линеен, а красоту надо наводить рандомно) . И в каком формате организовать обмен, ответ json/xml.

Oskar_AAA: Добрый вечер, коллеги. Спасибо за ответы. Всем успехов и удачи... Будем изучать и тестировать.

Pasha: Насчет админ прав - это мысль, проверю на проблемных компьютерах, где проказник-эксель отказывается работать Как раз подвернулся случай проверить - не помогло

Oskar_AAA: у меня все ка и было. Нотник -ОК. Рабочая станция - свалился на 145 файле в копирасте

Pasha: В последнее время я больше ориентируюсь на работу с LibreOffice. Механизм ole для него более тормозной, чем для Excel, структура объектов сложнее, но нет таких капризов и сюрпризов, как с Excel Или делаю работу с бланком xsl[x] как для одного, так и для второго пакета, и использую либо Excel-вариант, либо oo.

Andrey: Pasha пишет: В последнее время я больше ориентируюсь на работу с LibreOffice. Чем он отличается от OpenOffice ? Сам не ставил его, а вот экспорт из МиниГуи, как в примере MiniGUI\SAMPLES\Advanced\Tsb_Export\demo.prg что-то не пошёл у меня у заказчика.

Pasha: Andrey пишет: Чем он отличается от OpenOffice ? С точки зрения программирования - ничем. А нравится, не нравится - не тот вопрос. Да и использовать его заказчику необязательно. Положим на проблемных компах не получается работа с Excel. Формирую xls-документ через LibreOffice, а пользователь открывает его уже экселем Про OO ему и знать не надо

Oskar_AAA: Добрый вечер, коллеги. Поставили 2-ой ПК. Win10x64+Office2019 с правами администратора. Ошибок нет, весь отчет выгрузился без проблем. Коллеги, есть ли пример кода запуска LibreOffice под xHarbour? Всем Спасибо за участие и консультации! Успехов и удачи....



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