getexcel putexcel haal mijn komma er uit OPGELOST

Gestart door delangstevandestraat, do 11 08 2016, 07:16:42

Vorige topic - Volgende topic

delangstevandestraat

Ik gebruik getexcel.lsp

Ik heb hiermee allerlei waarden gelezen uit een excel file, maar nu wil ik iets terugschrijven naar de excelfile via putcell

syntax van putcell
;-------------------------------------------------------------------------------
; PutCell - Put values into Excel cells
; Arguments: 2
;   StartCell$ = Starting Cell ID
;   Data@ = Value or list of values
; Syntax examples:
; (PutCell "A1" "PART NUMBER") = Puts PART NUMBER in cell A1
; (PutCell "B3" '("Dim" 7.5 "9.75")) = Starting with cell B3 put Dim, 7.5, and 9.75 across
;-------------------------------------------------------------------------------
(defun PutCell (StartCell$ Data@ / Cell$ Column# ExcelRange Row#)
  (if (= (type Data@) 'STR)
    (setq Data@ (list Data@))
  )
  (setq ExcelRange (vlax-get-property *ExcelApp% "Cells"))
  (if (Cell-p StartCell$)
    (setq Column# (car (ColumnRow StartCell$))
          Row# (cadr (ColumnRow StartCell$))
    );setq
    (if (vl-catch-all-error-p
          (setq Cell$ (vl-catch-all-apply 'vlax-get-property
            (list (vlax-get-property *ExcelApp% "ActiveSheet") "Range" StartCell$))
          );setq
        );vl-catch-all-error-p
        (alert (strcat "The cell ID \"" StartCell$ "\" is invalid."))
        (setq Column# (vlax-get-property Cell$ "Column")
              Row# (vlax-get-property Cell$ "Row")
        );setq
    );if
  );if
  (if (and Column# Row#)
    (foreach Item Data@
      (vlax-put-property ExcelRange "Item" Row# Column# (vl-princ-to-string Item))
      (setq Column# (1+ Column#))
    );foreach
  );if
  (princ)
);defun PutCell


mijn stukje code heeft datacel als pointer naar de juiste cel (bvb "D3")
en apx en apy (rtos (car pos)) x-y waarden van een punt (bvb "1725.2354")

(openexcel filenamefull "SI" t)
  (putcell datacel1 apx)
  (putcell datacel2 apy)
  (Closeexcel filenamefull)      


het schrijven naar excel lukt wel, maar om één of andere reden raakt de decimale punt verloren,
Ik heb al geprobeerd om eerst de "." te vervangen door "," maar ook dat heeft niet gewerkt

Heeft er iemand een idee wat er fout loopt ?

in bijlage de volledige lsp file, je weet nooit waar het goed voor is
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

sschevers

Dit is een gevolg van je machine instellingen. Acad gebruikt als decimaal scheidingsteken een punt. Jouw machine staat waarschijnlijk ingesteld op een komma als decimaal scheidingsteken. Het schrijven van de cellen gaat goed echter wanneer je het sheet opent pas excel het automatisch aan naar de instellingen van je machine en ben je je komma kwijt.

Je kunt er voor kiezen om je decimaal scheidings teken aan te passen op je machine. Mogelijk dat deze link je probleem al voor je oplost http://ictoblog.nl/2011/03/10/tip-decimaalteken-in-excel-aanpassen

groeten


Stephan

roy_043

Het probleem ontstaat door de stringconversie. Gebruik de value2 property.
Citaat van: http://www.theswamp.org/index.php?topic=38450.msg435739#msg435739(setq cell (vlax-variant-value (vlax-get-property rng 'Item row n)))
(if (= (type data) 'STR)
  (vlax-put-property cell 'NumberFormat "@")
)
(vlax-put-property cell 'Value2 data)

delangstevandestraat

@ stephan

daar had ik ook aan gedacht en heb een stukje code bijgeschreven om de punt te vervangen door een komma, echter hetzelfde resultaat.

@roy

Ik veronderstel dat ik dat stukje code 2 maal nodig heb apx en apy ?
en aangezien apx en apy  via car en cadr bekomen worden en jij controleert op STR ? moet ik dan eerst rtos ook gebruiken ?


Hebben jullie het eventjes zelf uitgeprobeerd om te weten of jullie hetzelfde resultaat krijgen ?
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

sschevers

Heb het zelf niet geprobeerd. Mijn lisp is behoorlijk weg gezakt in de afgelopen jaren  :(
Kun je iets met deze routine? https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/comma-to-point-decimal-separator/td-p/879059

stephan

delangstevandestraat

stephan,

ik heb in lisp reeds een stukje code om de komma naar punt om te vormen,

echter bij het opslaan naar de xls file raakt dat teken verloren...
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

@delangstevandestraat:
Ik raad je aan om de code van Gile te gebruiken. Ik kan de code niet zelf testen omdat ik geen MS Office licentie bezit, maar ik heb zeer veel vertrouwen in het werk van Gile. Bovendien is hij een Fransman en heeft dus ook met dit probleem te maken.

De meeste argumenten voor gc:WriteExcel spreken voor zich. Uitzondering is wellicht dataList. Dit moet een lijst met sublijsten zijn. Dus bijv.: '((1.0 2.0 3.0) (4.0 5.0 6.0))

delangstevandestraat

#7
 @roy,

Ik heb toch nog eventjes tijd gevonden en de routine van gille chanteau geprobeerd

en de inhoud van de cellen klopt nu wel,
echter al de rest van de info en opmaak van het tabblad is nu verdwenen... ?
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

delangstevandestraat

Dan toch maar eventjes de code proberen te lezen :

op regel 68 in de lsp van gilles chanteau staat er eigenlijk een regel teveel

(vlax-invoke-method rng 'Clear)

deze eruit gekieperd

ook merk ik dat er nog andere instellingen van mijn excel verknoeid werden, zoals kolombreedte

regel 82..89 ook buiten werking gesteld ...

JIHA, ik kan gerust geweten op verlof....

in bijlage de code nogmaals van GillesChanteau
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)