ik ga EEN dag proberen het te automatiseren :-)
ik ga EEN dag proberen het te automatiseren :-)
Ooit heb ik een uitwisseling moeten doen waarbij Excel gebruikt werd.
Dit was niet groot of veel maar daar heb ik toen het volgende stukje code bij gebruikt.
Het is quick and dirty maar geeft je een idee hoe ik het toen heb aangepakt.
Misschien is het iets.
In onderstaande procedure worden de gegevens gekopieerd naar een stringgrid op het formulier.
Gr,
Jos
Code:procedure TForm43.sh1(SheetIndex:integer); Var XLapp1, Sheet:Variant ; MaxRow, MaxCol,X, Y:integer ; str:string; arrData:Variant; begin Str:=trim(OD.FileName); XLApp1 := createoleobject('excel.application'); XLApp1.Workbooks.open(Str) ; Sheet := XLApp1.WorkSheets[SheetIndex] ; MaxRow := Sheet.Usedrange.EntireRow.count ; MaxCol := sheet.Usedrange.EntireColumn.count; //read the used range to a variant array arrData:= Sheet.UsedRange.Value; form43.stg.RowCount:=maxRow+1; form43.stg.ColCount:=maxCol+1; for x:=1 to maxCol do for y:=1 to maxRow do //copy data to grid stg.Cells[x,y]:=arrData[y, x]; // do note that the indices are reversed (y, x) XLApp1.Workbooks.close; end;
Thanks. Misschien komt dit van pas. Quick and dirty is ook het doel :-)
Alleen het middel, hoop ik, geheiligd door het doel.
1+1=b
tms flexcell?
dat kost geld...
Fijn dat er nog vrijwillige programmeurs bestaan voor commerciele projecten ....dat kost geld...
Die 175 euro ben je toch onderhand al wel kwijt aan het schrijven van replies in deze thread?
1+1=b
nah. ik ga niet TMS aanschaffen voor een eenmalig iets.
ik kan best snel typen...
Indien de excel redelijk eenvoudig (te parameteriseren) is, dan is wellicht fpspreadsheet in een dll ook nog een simpele optie.
Wanneer je met een olevariant array werkt en daar je data in stopt kan je in 1 keer al je data naar excel schrijven
Volgens mij werkt het andersom ook.
Hieronder een kort voorbeeld
Code:procedure TDSO_5012.DatatoExcel(Iwave:Array of SmallInt); var ExcelApp : TexcelApplication; Sheet : TexcelWorksheet; data: olevariant; i, num_points :integer; begin num_points:= 1000; ExcelApp := TexcelApplication.Create(nil); Sheet := TexcelWorksheet.Create(nil); ExcelApp.Connect; ExcelApp.Workbooks.Add(xlwbatworksheet, 0); sheet.ConnectTo(ExcelApp.ActiveSheet as _Worksheet); Data := VarArrayCreate([0, num_points+1, 0, 1], varvariant); data[0, 0] :='time'; data[0, 1] :='Value'; for i := 0 to num_points - 1 do begin data[i + 1, 0] :=i; data[i + 1, 1] :=Iwave[i]; end; sheet.range['A1', 'B'+ inttostr(num_points+1)].value:=data; Excelapp.Visible[0] := true; sheet.disconnect; excelapp.disconnect; sheet.free; excelapp.free; end;
De excelleescode was bijzonder handig! Godallemachtig wat is dat overigens sloom zeg! Maar goed het is eenmalig.
Direct weer opslaan als CSV en we zijn beyond excel :-)
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks