Форум » GUI » Excel NumberFormat » Ответить

Excel NumberFormat

krutoff: Столкнулся с таким багом. Может, кто поборол его? Если вывожу TSBrowse в Excel с помощью метода oBrw:ExcelOle, то числовое поле со значением к примеру 3.87 выводится как дата Март 1987. А если выводить с помощью метода oBrw:Excel2 -> то все, как надо.

Ответов - 5

Pasha: Как бы надо доработать метод ExcelOle, добавить возможность устанавливать нужный NumberFormat для колонки Сейчас он устанавливается только для типа данных character, для остальных Excel сам преобразует ячейку, вот и получается фигня Может в TSColumn:cargo как-то отмечать, или добавить отдельное свойство в TSColumn

krutoff: Спасибо. Попробую сделать пока отдельную функцию, а потом переведу в метод класса...

SergKis: krutoff пишет Попробую сделать пока отдельную функцию, а потом переведу в метод класса... Может достаточно так сделать [pre2] METHOD ExcelOle( cXlsFile, lActivate, hProgress, cTitle, hFont, lSave, bExtern, aColSel, bPrintRow ) CLASS TSBrowse LOCAL oExcel, oBook, oSheet, nRow, nCol, uData, nEvery, oRange, cRange, cCell, cLet, nColHead, nVar, ; cText, nStart, nTotal, aFont, aRepl, hFntTitle, ; nLine := 1, ; nCount := 0, ; nRecNo := ( ::cAlias )->( RecNo() ), ; nAt := ::nAtPos, ; aCol := { 26, 52, 78, 104, 130, 156 }, ; aLet := { "", "A", "B", "C", "D", "E" }, ; nOldRow := ::nLogicPos(), ; nOldCol := ::nCell, ; lSelector := ::lSelector LOCAL nTmp, cTmp ... uData := ::bDataEval( ::aColumns[ nCol ] ) IF ValType( uData ) == "C" oSheet:Cells( nLine, nCol ):NumberFormat := "@" IF At( CRLF, uData ) > 0 uData := StrTran( uData, CRLF, "&&" ) IF AScan( aRepl, nCol ) == 0 AAdd( aRepl, nCol ) ENDIF ENDIF ENDIF //IF ::aColumns[ nCol ]:cPicture != NIL .AND. uData != NIL // uData := Transform( uData, ::aColumns[ nCol ]:cPicture ) //ENDIF IF ValType( uData ) == "N" IF ::aColumns[ nCol ]:cPicture != NIL uData := Transform( uData, ::aColumns[ nCol ]:cPicture ) ELSE uData := cValToChar(uData) ENDIF cTmp := "#0" IF ( nTmp := AT(".", uData) ) > 0 cTmp := Repl("#", nTmp - 2) + '0,' + Repl("0", Len(uData) - nTmp) ENDIF oSheet:Cells( nLine, nCol ):NumberFormat := cTmp ELSE IF ::aColumns[ nCol ]:cPicture != NIL .AND. uData != NIL uData := Transform( uData, ::aColumns[ nCol ]:cPicture ) ENDIF uData := iif( ValType( uData ) == "D", DToC( uData ), iif( ValType( uData ) == "N", Str( uData ), ; iif( ValType( uData ) == "L", iif( uData, ".T.", ".F." ), cValToChar( uData ) ) ) ) ENDIF cText += Trim( uData ) + Chr( 9 ) ... [/pre2] и собрать tsbrowse.lib, запустив MakeLib.bat


SergKis: Поправил текст выше т.к. спутал ::bDataEval(...) с ::GetValue(...)

gfilatov2002: SergKis пишет: Поправил текст OK Благодарю за помощь



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