#! perl -w use strict; use Win32::OLE; use Win32::OLE::Const "Microsoft Excel"; require "C:/perl/lib/ctime.pl"; my $TAIL="c:/make/unix/usr/local/wbin/tail"; my $index=0; # assign a temp filename my $tmpfile="c:/tmp/$$"; unlink($tmpfile) if -e $tmpfile; # Where is input coming from? my $datafile="z:/dir/di1"; # How many points to plot? my $datapoints=24; # Extract last $datapoints lines from $datafile to a plotfile system("$TAIL -$datapoints $datafile > $tmpfile.data"); # Open up our data file for writing open(DATAFILE,"<$tmpfile.data"); my @Fld=(); my $row = 1; # Create a new Excel workbook my $Excel = Win32::OLE->new("Excel.Application"); $Excel->{Visible} = 0; #1 to show my $Book = $Excel->Workbooks->Add; my $Sheet = $Book->Worksheets(1); my $Range = $Sheet->Range("A1:G1"); $Range->{Value} = ['Time', 'Barometer', 'Temperature','Dew Point','Barometer','Tin','Tout']; $Range = $Sheet->Range("A2:G2"); # add data to excel while () { chomp; # Split on single tab @Fld = split('\t', $_); $Range->{Value} = \@Fld; $row++; $Range = $Sheet->Range("A$row:G$row"); } $Range = $Sheet->Range("A1:A$datapoints,F1:G$datapoints"); my $Chart = $Excel->Charts->Add; $Chart->{ChartType} = xlXYScatterLines; $Chart->SetSourceData({Source => $Range, PlotBy => xlColumns}); $Chart->{HasTitle} = 1; $Chart->ChartTitle->{Text} = "Recent Temperatures"; $Chart->ChartTitle->{Font}->{Size} = 20; $Chart->ChartTitle->{Font}->{Bold} = 1; $Chart->{HasLegend} = 1; $Chart->Legend->{Position} = xlBottom; # Configure the X axis. if( my $Axis = $Chart->Axes( xlCategory ) ) { $Axis->{HasMajorGridlines} = 1; $Axis->{MajorUnit} = .25; $Axis->{TickLabels}->{NumberFormat} = "h:mm"; $Axis->{TickLabels}->{Font}->{Bold} = 1; $Axis->{TickLabels}->{Font}->{Size} = 16; $Axis->{HasTitle} = 1; $Axis->{AxisTitle}->{Characters}->{Text} = "Time"; $Axis->{AxisTitle}->{Font}->{Size} = 16; $Axis->{AxisTitle}->{Font}->{Bold} = 1; } # Configure the Y axis. if( my $Axis = $Chart->Axes( xlValue ) ) { $Axis->{HasMajorGridlines} = 1; $Axis->{MajorGridlines}->{Border}->{Weight} = 1; $Axis->{MajorGridlines}->{Border}->{ColorIndex} = 48; $Axis->{MajorGridlines}->{Border}->{LineStyle} = xlContinuous; $Axis->{TickLabels}->{Font}->{Bold} = 1; $Axis->{TickLabels}->{Font}->{Size} = 16; $Axis->{HasTitle} = 1; $Axis->{AxisTitle}->{Characters}->{Text} = "Temp (deg C)"; $Axis->{AxisTitle}->{Font}->{Size} = 16; $Axis->{AxisTitle}->{Font}->{Bold} = 1; } $Chart->SeriesCollection(1)->{MarkerStyle} = xlNone; $Chart->SeriesCollection(1)->{Border}->{Weight} = xlThick; $Chart->SeriesCollection(1)->{Smooth} = 0; #set as 1 to smooth $Chart->SeriesCollection(2)->{MarkerStyle} = xlNone; $Chart->SeriesCollection(2)->{Border}->{Weight} = xlThick; #xlMedium $Chart->PlotArea->Border->{LineStyle} = xlContinuous; $Chart->PlotArea->Border->{ColorIndex} = 1; $Chart->PlotArea->Interior->{Colorindex} = 2; $Chart->ChartArea->Interior->{Colorindex} = 0; #41 Med Blue , 0 white my $File = "W:/pressure/tempchart.png"; $Chart->Export( $File, "PNG", 0 ); $Excel->ActiveWorkbook->Close(0); $Excel->Quit; close DATAFILE;