12. februar 2002 - 11:10 Der er 2 kommentarer og
1 løsning

Excel OLE i Perl - problemer med xvalues, values og name

Jeg har skrev den efterfølgende kode i Visual Basic for Applications. Min opgave er at få oversat koden til PERL. Det har jeg så gjort og det ses i den næste kodestump. PERL koden kan jeg dog ikke få til at virke. Linje 13, 14 og 15 giver ved oversættelsen fejl. Jeg har prøvet at skrive linjerne på mange forskellige måder, og har nu fået den rettet til så det vidst kun er syntaxfejl. Programmet er et testprogram som åbner et eksisterende Exceldokument der har en graf og nogle data i forvejen. Programmet skal så koble grafen og dataene sammen vha. setSourceData, XValues, Values og Name.

Hvad skal jeg gøre ved linje 13, 14 og 15 for at få koden til at virke i PERL? Hvad er den virkende syntax?



Koden i VBA:

  Dim xlApp As Application ' Erklær variablen til referencen.
  Dim xlWorkbook As Workbook
  Dim xlSheet As Worksheet
  Dim xlChartObject As ChartObject
  Dim xlChart As chart
  Dim xlSeries As Series
     
  Dim dmain As String
  Dim datarange As Range
 
  dmain = "C:\INVOICEMAKER"
  Set xlApp = CreateObject("excel.application")
  Set xlWorkbook = xlApp.Workbooks.Open(dmain & "\test1.xls")
  Set xlSheet = xlWorkbook.Worksheets(1)
  Set xlChartObject = xlSheet.ChartObjects(1)
  Set xlChart = xlChartObject.chart
  Set datarange = xlSheet.Range("E5:P8")
  xlChart.SetSourceData Source:=datarange
  Set xlSeries = xlChart.SeriesCollection(1)
  xlSeries.XValues = xlSheet.Range("E5:P5")
  xlSeries.Values = xlSheet.Range("E6:P6")
 
  xlChart.SeriesCollection(1).name = "=ark1!R6C4"
  xlApp.Visible = True


Koden i PERL:


1  use Win32::OLE qw(in with);
2  use strict;

3  $Win32::OLE::Warn = 3;

4  my $MAINDIR ="C:\\INVOICEMAKER";

5  my $xlApp = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
6  my $xlWorkbook = $xlApp->Workbooks->Open($MAINDIR."\\test1.xls");
7  my $xlSheet = $xlWorkbook->Worksheets(1);
8  my $xlChartObject = $xlSheet->ChartObjects(1);
9  my $xlChart = $xlChartObject->chart();
10 my $datarange = $xlSheet->Range("E5:P8");

11 #$xlChart->setSourceData->{Source}=$datarange;
12 $xlChart->setSourceData($datarange);

13 my $xlSeries = $xlChart->SeriesCollection(1);

14 $xlSeries->XValues =$xlSheet->Range("E5:P5");


15 $xlSeries->Values  =$xlSheet->Range("E6:P6");

16 $xlSeries->Name = "=ark1!R6C4";
12. februar 2002 - 11:12 #1
Rettelse: Linjerne med fejl i er ikke 13-15 men 14-16 hvor metoderne XValues, Values og Name indgår.
Avatar billede jespernaur Nybegynder
19. februar 2002 - 23:08 #2
Efter at have bokset betragteligt med sagen er jeg nået frem til følgende:

use strict;
use Win32::OLE qw(in with);

$Win32::OLE::Warn = 3;

my $MAINDIR ="C:\\INVOICEMAKER";

my $xlApp = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
my $xlWorkbook = $xlApp->Workbooks->Open($MAINDIR."\\test1.xls");
my $xlSheet = $xlWorkbook->Worksheets(1);
my $xlChartObject = $xlSheet->ChartObjects(1);
my $xlChart = $xlChartObject->chart();
my $datarange = $xlSheet->Range("E5:P8");

#$xlChart->setSourceData->{Source}=$datarange;
$xlChart->setSourceData($datarange);

my $xlSeries = $xlChart->SeriesCollection(1);

$xlSeries->{XValues} = $xlSheet->Range("E5:P5")->{'Value'};

$xlSeries->{Values}  = $xlSheet->Range("E6:P6")->{'Value'};

$xlSeries->{Name} = "=ark1!R6C4"; 


Prøv det, og se hvordan det går.

Mvh
Jesper Naur
27. februar 2002 - 08:44 #3
Det virker, men jeg fandt ud af at linje 13-16 faktisk er overflødige. Excel kan selv, hvis man definerer dataområdet rigtigt, finde ud af at finde XValues, Values og Names. Da det virker får du pointene alligevel.

Tak for bokseriet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester