CADsite forum

AutoCAD => Autolisp => Topic gestart door: delangstevandestraat op do 11 08 2016, 07:16:42

Titel: getexcel putexcel haal mijn komma er uit OPGELOST
Bericht door: delangstevandestraat op do 11 08 2016, 07:16:42
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
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: sschevers op do 11 08 2016, 09:11:49
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 (http://ictoblog.nl/2011/03/10/tip-decimaalteken-in-excel-aanpassen)

groeten


Stephan
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: roy_043 op do 11 08 2016, 09:42:42
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)
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: delangstevandestraat op di 16 08 2016, 09:37:07
@ 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 ?
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: sschevers op di 16 08 2016, 10:40:48
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 (https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/comma-to-point-decimal-separator/td-p/879059)

stephan
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: delangstevandestraat op di 16 08 2016, 11:55:45
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...
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: roy_043 op di 16 08 2016, 13:36:21
@delangstevandestraat:
Ik raad je aan om de code van Gile (http://www.theswamp.org/index.php?topic=38450.msg435739#msg435739) 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))
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: delangstevandestraat op wo 17 08 2016, 11:38:56
 @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... ?
Titel: Re: getexcel putexcel haal mijn komma er uit
Bericht door: delangstevandestraat op do 18 08 2016, 10:58:48
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