Автор | Сообщение |
|
| постоянный участник
|
Пост N: 305
Зарегистрирован: 06.02.07
|
|
Отправлено: 03.04.12 12:00. Заголовок: Чтение/запись XLS _без_OLE (библиотека LibXL)
| |
|
Ответов - 13
[только новые]
|
|
|
| |
Пост N: 40
Зарегистрирован: 28.07.10
|
|
Отправлено: 03.04.12 14:39. Заголовок: а как потом результа..
а как потом результат показать? напечатать?
| |
|
|
| |
Пост N: 484
Зарегистрирован: 11.06.10
|
|
Отправлено: 03.04.12 14:43. Заголовок: SADSTAR33 пишет: а ..
SADSTAR33 пишет: цитата: | а как потом результат показать? напечатать? |
|
В чем сарказм? Как результат можно привести самодостаточный пример для работы с XLS/XLSX.
| |
|
|
| постоянный участник
|
Пост N: 306
Зарегистрирован: 06.02.07
|
|
Отправлено: 03.04.12 14:54. Заголовок: Она (биб-ка), правда..
Она (биб-ка), правда, платная ($199) - а "халява" читает только 100 строк из экселки и пишет тоже с ограничениями. Интересно просто - кто-нибудь в курсе наличия приблизительных (но халявных) аналогов? (чтобы _книгу_ делать, а не _отдельный_лист_) Меня, в общем-то, в 1ю голову интересует "читалка" из экселки.
| |
|
|
| |
Пост N: 58
Зарегистрирован: 16.12.08
|
|
Отправлено: 03.04.12 16:58. Заголовок: Попробуйте, неплохая..
| |
|
|
| постоянный участник
|
Пост N: 2143
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.04.12 20:53. Заголовок: santy пишет: Если в..
santy пишет: цитата: | Если вам нужно создавать отчёты в excel можна использовать ExCovnerter. Сам его использую. |
| Классная штука ! Жаль на Харбор нельзя перевести !
| |
|
|
| |
Пост N: 16
Зарегистрирован: 02.08.10
|
|
Отправлено: 03.04.12 20:54. Заголовок: Пользуюсь Йокселем к..
Пользуюсь Йокселем как ActiveX объектом создает, читает, печатает, редактирует excel 97-2003 (выше пока не надо ). http://yoksel.net.ru ЗЫ. Также читает и пишет в формате ( mxl - 1Cv77 ) - так что можно тягать формы прямо из 1С
| |
|
|
| |
Пост N: 17
Зарегистрирован: 02.08.10
|
|
Отправлено: 03.04.12 21:04. Заголовок: И еще. В БАРС есть м..
И еще. В БАРС есть модуль xlsreport - создание отчетов из шаблонов екселя. Без ОЛЕ. В исходном коде. Насколько я понимаю, формат старого экселя уже давно известен ( biff8 кажется зовется ). Сам этим модулем не пользовался , т.к. для отображения результата там вызывается Эксель, что мне не подошло.
| |
|
|
| постоянный участник
|
Пост N: 54
Зарегистрирован: 13.09.07
|
|
Отправлено: 07.10.12 17:01. Заголовок: yury пишет: Пользую..
yury пишет: цитата: | Пользуюсь Йокселем как ActiveX объектом |
| А можно привести пример использования на Harbour?
| |
|
|
| |
Пост N: 18
Зарегистрирован: 02.08.10
|
|
Отправлено: 08.10.12 12:39. Заголовок: leo пишет: А можно ..
leo пишет: цитата: | А можно привести пример использования на Harbour? |
| Да не вопрос. Скрытый текст oYoksel := TOleAuto():New( "Yoksel" ) IF oYoksel == nil MsgStop('Ошибка создания объекта табличного документа !','Ошибка') RETURN Endif oDoc := oYoksel:CreateSpreadsheetDocument() IF oDoc == nil MsgStop('Ошибка создания объекта табличного документа !','Ошибка') RETURN Endif DBCREATE("mem:repo", {{"IDLIK", "N", 6, 0},{"GOD", "N", 4, 0},{"MES", "N", 2, 0},{"Kvo5", "N", 3, 0},{"Sum5", "N", 12, 2},; {"KvoFSS", "N", 3, 0},{"SumFSS", "N", 12, 2}},, .T., "memarea") INDEX ON STR(FIELD->IDLIK,6)+STR(FIELD->GOD,4)+STR(FIELD->MES,2) TAG LIK // открытие шаблона // oTmpl := oYoksel:CreateSpreadsheetDocument() IF oTmpl == nil MsgStop('Ошибка создания объекта табличного документа !','Ошибка') RETURN Endif oTmpl:Open(DirPrg()+"\rpt\template\Rpt_Liklist.mxl", 1, 0 ) IF oTmpl == nil MsgStop('Ошибка создания объекта табличного документа !','Ошибка') RETURN Endif //Шапка cPeriod := LOWER(Rus_Month( MONTH( dGl_WorkDate ) ) ) + " " + STR( YEAR ( dGl_WorkDate ), 4 ) + " г." oReg1 := oTmpl:Area( 1, 1 ) // 1 строка - заголовок отчета cTxt := oReg1:Text cTxt := STRTRAN( cTxt, "["+"cPeriod"+"]", cPeriod) oDoc:PasteArea( oReg1, 1 , 1 ) oReg2 := oDoc:Area( 1, 1 ) oReg2:Text := cTxt // 2-4 строка - заголовок таблицы oReg1 := oTmpl:Area( 2, 1, 4, 11 ) oDoc:PasteArea( oReg1, 2, 1 ) //ширина полей oReg2 := oDoc:Area( oDoc:TableHeight(), 1 ) oReg2:ColumnWidth := 9 oReg2 := oDoc:Area( oDoc:TableHeight(), 2 ) oReg2:ColumnWidth := 9 oReg2 := oDoc:Area( oDoc:TableHeight(), 3 ) oReg2:ColumnWidth := 50 oReg2 := oDoc:Area( oDoc:TableHeight(), 4 ) oReg2:ColumnWidth := 14 oReg2 := oDoc:Area( oDoc:TableHeight(), 5 ) oReg2:ColumnWidth := 11 oReg2 := oDoc:Area( oDoc:TableHeight(), 6 ) oReg2:ColumnWidth := 11 oReg2 := oDoc:Area( oDoc:TableHeight(), 7 ) oReg2:ColumnWidth := 12 oReg2 := oDoc:Area( oDoc:TableHeight(), 8 ) oReg2:ColumnWidth := 6 oReg2 := oDoc:Area( oDoc:TableHeight(), 9 ) oReg2:ColumnWidth := 12 oReg2 := oDoc:Area( oDoc:TableHeight(), 10 ) oReg2:ColumnWidth := 6 oReg2 := oDoc:Area( oDoc:TableHeight(), 11 ) oReg2:ColumnWidth := 12 nNom := 0 liklist->( DBGOTOP () ) DO WHILE !liklist->( EOF() ) nNom += 1 nIdLik := liklist->id nTn := liklist->tn cFio := liklist->fio nLik := liklist->nomlik cDateBegin := liklist->BeginDate cDateEnd := liklist->EndDate nSum := liklist->SumLik5 + liklist->SumLikFss nKvoDn5 := liklist->KvoDn5 nSum5 := liklist->SumLik5 nKvoDnFSS := liklist->KvoDnFss nSumFSS := liklist->SumLikFss //итоги nSumIt += liklist->SumLik5 + liklist->SumLikFss nKvoDn5It += liklist->KvoDn5 nSum5It += liklist->SumLik5 nKvoDnFSSIt += liklist->KvoDnFss nSumFSSIt += liklist->SumLikFss oReg1 := oTmpl:Area( 6, 1, 6, 11) oDoc:PasteArea(oReg1,oDoc:TableHeight() + 1, 1) oReg2 := oDoc:Area( oDoc:TableHeight(), 1 ) oReg2:Text := nNom oReg2 := oDoc:Area( oDoc:TableHeight(), 2 ) oReg2:Text := nTn oReg2 := oDoc:Area( oDoc:TableHeight(), 3 ) oReg2:Text := cFio oReg2 := oDoc:Area( oDoc:TableHeight(), 4 ) oReg2:Text := nLik oReg2 := oDoc:Area( oDoc:TableHeight(), 5 ) oReg2:Text := DTOC(cDateBegin) oReg2 := oDoc:Area( oDoc:TableHeight(), 6 ) oReg2:Text := DTOC(cDateEnd) oReg2 := oDoc:Area( oDoc:TableHeight(), 7 ) oReg2:Text := nSum oReg2 := oDoc:Area( oDoc:TableHeight(), 8 ) oReg2:Text := nKvoDn5 oReg2 := oDoc:Area( oDoc:TableHeight(), 9 ) oReg2:Text := nSum5 oReg2 := oDoc:Area( oDoc:TableHeight(), 10 ) oReg2:Text := nKvoDnFss oReg2 := oDoc:Area( oDoc:TableHeight(), 11 ) oReg2:Text := nSumFss memarea->( DBGOTOP() ) DO WHILE !memarea->( EOF() ) IF memarea->idlik == nIdLik cMes := LOWER(Rus_Month( memarea->mes ) ) + " " + STR( memarea->god, 4 ) + " г." nSum := memarea->Sum5 + memarea->SumFss nKvoDn5 := memarea->Kvo5 nSum5 := memarea->Sum5 nKvoDnFss := memarea->KvoFss nSumFss := memarea->SumFss oReg1 := oTmpl:Area( 8, 1, 8, 11) oDoc:PasteArea(oReg1,oDoc:TableHeight() + 1, 1) oReg2 := oDoc:Area( oDoc:TableHeight(), 3 ) oReg2:Text := cMes oReg2 := oDoc:Area( oDoc:TableHeight(), 7 ) oReg2:Text := nSum oReg2 := oDoc:Area( oDoc:TableHeight(), 8 ) oReg2:Text := nKvoDn5 oReg2 := oDoc:Area( oDoc:TableHeight(), 9 ) oReg2:Text := nSum5 oReg2 := oDoc:Area( oDoc:TableHeight(), 10 ) oReg2:Text := nKvoDnFss oReg2 := oDoc:Area( oDoc:TableHeight(), 11 ) oReg2:Text := nSumFss ENDIF memarea->(DBSKIP()) ENDDO liklist->( DBSKIP() ) ENDDO //итоги oReg1 := oTmpl:Area( 10, 1, 10, 11) oDoc:PasteArea(oReg1,oDoc:TableHeight() + 1, 1) oReg2 := oDoc:Area( oDoc:TableHeight(), 7 ) oReg2:Text := nSumIt oReg2 := oDoc:Area( oDoc:TableHeight(), 8 ) oReg2:Text := nKvoDn5It oReg2 := oDoc:Area( oDoc:TableHeight(), 9 ) oReg2:Text := nSum5It oReg2 := oDoc:Area( oDoc:TableHeight(), 10 ) oReg2:Text := nKvoDnFssIt oReg2 := oDoc:Area( oDoc:TableHeight(), 11 ) oReg2:Text := nSumFssIt IF ( fh:= hb_FTempCreateEx(@cRptName, Nil, Nil,".tmp")) != F_ERROR FClose(fh) Else MsgStop("Ошибка создания файла :"+ Str(FERROR())) RETURN Nil Endif oDoc:FixRowsTop := 4 oDoc:PrintingOptions:FitToPage := 1 oDoc:PrintingOptions:Orientation := 2 oDoc:PrintingOptions:MarginLeft := 100 oDoc:PrintingOptions:MarginRight := 0 oDoc:PrintingOptions:MarginTop := 50 oDoc:PrintingOptions:MarginBottom := 50 oDoc:Save( cRptName, 1 ) oReg1 := Nil oReg2 := Nil oDoc := Nil oTmpl := Nil oYoksel := Nil IF SELECT( "zpt" ) != 0 zpt->( DBCLOSEAREA() ) ENDIF IF SELECT( "liktabch" ) != 0 liktabch->( DBCLOSEAREA() ) ENDIF DBDROP("mem:repo") memarea->( DbCloseArea() ) SELECT( nOldSelect ) view_repo( cRptName )
| Процедура показа сформированного листа Эксель Скрытый текст #include "minigui.ch" Function View_Repo( cNameRepo, cFName ) //Default(@cFName, "" ) DEFAULT cFName TO "" IF !FILE( cNameRepo ) Return Nil ENDIF lThemed := IsThemed() IF !IsWindowDefined( ViewRepo ) DEFINE WINDOW ViewRepo ; AT nGl_WinWidth * 0.13, nGl_WinHeight * 0.23 ; WIDTH nGl_WinWidth * 0.97 ; HEIGHT nGl_WinHeight * 0.87 ; TITLE 'Просмотр отчета' ; ICON 'IDI_MAIN' ; CHILD ; ON INIT Show_Repo( cNameRepo ) ; ON RELEASE { || FERASE( cNameRepo ) } ; ON SIZE Adjust_ViewRepo() ; ON MAXIMIZE Adjust_ViewRepo() DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 90,32 FLAT RIGHTTEXT BUTTON PrintOp CAPTION 'Параметры страницы' PICTURE "IDB_PRINT_OPT" ACTION PrintOptions() AUTOSIZE BUTTON Print CAPTION 'Печать' PICTURE "IDB_PRINT" ACTION PrintRepo() AUTOSIZE BUTTON Excel CAPTION 'Сохранить' PICTURE "IDB_EXCEL" ACTION Save2Excel(cFName) AUTOSIZE BUTTON Close CAPTION _HMG_aABMLangButton[1] PICTURE "MINIGUI_EDIT_CLOSE" ACTION ViewRepo.Release AUTOSIZE END TOOLBAR DEFINE ACTIVEX acxYoksel ROW 45 COL 0 WIDTH GetProperty( "ViewRepo" , "width" ) - 07 HEIGHT GetProperty( "ViewRepo" , "height" ) - 102 PROGID "Yoksel.ActiveXCtrl.1" END ACTIVEX END WINDOW Center Window ViewRepo Activate Window ViewRepo ELSE ViewRepo.Show ENDIF Return Nil Procedure PrintRepo() Local oObject oObject := GetProperty( 'ViewRepo', 'acxYoksel', 'Object' ) oObject:GetControl():Document:Print( 1 ) Return Procedure PrintOptions() Local oObject oObject := GetProperty( 'ViewRepo', 'acxYoksel', 'Object' ) oObject:GetControl():Document:ShowPageSetupDialog() Return Procedure Save2Excel( cFName ) Local cExt, cSaveFile, nIndex := 1, oObject cSaveFile := PutFile( {{"Excel files (*.xls)", "*.xls"}} ,"Сохранить как..." , , ,cFName ) cExt := "xls" IF !EMPTY( cSaveFile) oObject := GetProperty( 'ViewRepo', 'acxYoksel', 'Object' ) oObject:GetControl():Document:Save( cSaveFile , 1 ) ENDIF Return Procedure Show_Repo( cNameRepo ) Local oObject oObject := GetProperty( 'ViewRepo', 'acxYoksel', 'Object' ) oObject:GetControl():Document:Open( cNameRepo , 2 ) oObject:GetControl():ReadOnly( 0 ) Return Procedure Adjust_ViewRepo() // ROW 32 // COL 0 SetProperty( "ViewRepo" , "acxYoksel" , "width" , GetProperty( "ViewRepo" , "width" ) - 07 ) SetProperty( "ViewRepo" , "acxYoksel" , "height" , GetProperty( "ViewRepo" , "height" ) - 102 ) Return #include "ActiveX.prg"
|
| |
|
|
| постоянный участник
|
Пост N: 55
Зарегистрирован: 13.09.07
|
|
Отправлено: 08.10.12 16:07. Заголовок: yury пишет: Да не в..
yury пишет: Большое спасибо!
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 29.11.12
|
|
Отправлено: 29.11.12 09:17. Заголовок: OpenOffice
А, для экспорта в файлы ODS OpenOffice есть библиотеки?
| |
|
|
|
| Администратор
|
Пост N: 2566
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.11.12 13:46. Заголовок: pasergey пишет: А, ..
pasergey пишет: цитата: | А, для экспорта в файлы ODS OpenOffice есть библиотеки? |
| Эта тема обсуждалась на форуе неоднократно, например - здесь: http://clipper.borda.ru/?1-4-0-00000214-000-0-0-1249881802 Можно просто сделать поиск по форуму по ключевому слову openoffice Если вкратце ответ - то можно. Про библиотеки - не знаю, может и есть А какой экспорт нужен ? Я к примеру использую документы ods как шаблон с закладками, и в закладки заношу информацию. Или в таблицы.
| |
|
|
| |
Пост N: 114
Зарегистрирован: 05.10.06
|
|
Отправлено: 30.10.15 15:07. Заголовок: yury пишет: Пользую..
yury пишет: цитата: | Пользуюсь Йокселем как ActiveX объектом создает, читает, печатает, редактирует excel 97-2003 (выше пока не надо ). http://yoksel.net.ru ЗЫ. Также читает и пишет в формате ( mxl - 1Cv77 ) - так что можно тягать формы прямо из 1С |
| А что можно использовать для mxl - 1C8.2 ? Видно новый формат не поддерживает Йоксель
| |
|
|
|