ArmandoG has asked for the wisdom of the Perl Monks concerning the following question:

Wise monks!
I got this problem I need to copy a cell and cant do it this is the code I am using:
$Sheet->Range('A17')->Select(); $Sheet->Selection->Copy(); $Sheet->Range('B15')->Select(); $Sheet->ActiveSheet->Paste();
but that did not work what is wrong? I take this from the VBA in the macro.

Please wise monks what is wrong? thank you UPDATE!!!!: This is the full script I am using everything else work it has some perks but still it does the good, now the only part I can figure it out is the copy and past of the cells
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); #------ Abro el archivo CSV y lo dirijo al primera hoja de trabajo + ----- my $Book = $Excel->Workbooks->Open("$dir/$file"); my $Sheet = $Book->Worksheets(1); print "el libro es : $Book"; #----- View file ------------------------------------------- #$Excel->{'Visible'} = 1; $Sheet->Rows("1:16")->Insert(-4121,0); $Sheet->Columns('A:M')->Select(); $Sheet->Columns('A:M')->EntireColumn->Autofit(); #$Sheet->Cells(13,5)->{Value} = "Relacion de Operaciones Correspondi +entes a la semana No."; $Sheet->Range("A16:L16")->{Value} = [[ 'Patente', 'Pedimento', 'Cv +e. Doc.', 'Fecha Entrada', 'Fecha Salida', 'RFC Imp/Exp', 'CURP', 'Pe +so Bruto', 'Contribuciones', 'Banco', 'Ped. Orig.', 'Ped. Rectif']]; $Book->ActiveSheet->Pictures->Insert( "C:\\proyecto\\aaa.bmp" )->S +elect; print "Aqui hay algo $file\n"; my $LastRow = $Sheet->UsedRange->Find({What=>"*", SearchDirection=>xlPrevious, SearchOrder=>xlByRows})->{Row}; my $LastCol = $Sheet->UsedRange->Find({What=>"*", SearchDirection=>xlPrevious, SearchOrder=>xlByColumns})->{Column}; #------ Imprimo en pantalla los valores ------- print "\nUltima Columna:"; print "$LastCol\n"; print "\nUltimo renglon:"; print "$LastRow\n"; #------ Ahora busco las celdas de la hoja de excel ----- #en este caso dejo la primera linea sin contar porque es la de los enc +abezados my ($Start_col, $Num_Cols,$End_col) = ('A', $LastCol, 'A'); ++$End_col while --$Num_Cols; my ($Start_row, $Num_rows) = (16, $LastRow); my $End_row = $Start_row + $Num_rows - 1; my $Range_str = "$Start_col$Start_row:$End_col$End_row"; my $range = $Sheet->Range($Range_str); $range->AutoFormat(2); $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> {Horizonta +lAlignment} = xlHAlignCenter; $Sheet -> Range('H:I') -> {HorizontalAlignment} = xlHAlignRight; $Sheet -> PageSetup -> {Orientation} = xlLandscape; $Sheet -> PageSetup -> {Zoom} = 75; $Sheet -> PageSetup -> {FitToPagesWide} = 1; $Sheet->Columns('H:H')->{NumberFormat}='#,##0.000'; $Sheet->Columns('I:I')->{NumberFormat}='#,##0'; $Sheet -> Range('A1:M15') -> Borders(xlEdgeBottom) -> {LineStyle +} = xlNone; $Sheet -> Range('A1:M15') -> Borders(xlEdgeLeft) -> {LineStyle +} = xlNone; $Sheet -> Range('A1:M15') -> Borders(xlEdgeTop) -> {LineStyle +} = xlNone; $Sheet -> Range('A1:M15') -> Borders(xlEdgeRight) -> {LineStyle +} = xlNone; $Sheet -> Range('A1:M15') -> Borders(xlEdgeBottom) -> {LineStyle +} = xlNone; $Sheet -> Range('A1:M15') -> Select(); $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeBottom) -> {LineStyle} = xlDouble; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeBottom) -> {Weight} = xlThick; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeBottom) -> {ColorIndex} = 1; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeLeft) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeLeft) -> {Weight} = xlThin; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeTop) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeTop) -> {Weight} = xlThin; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeBottom) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeBottom) -> {Weight} = xlThin; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeRight) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +EdgeRight) -> {Weight} = xlThin; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +InsideVertical) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +InsideVertical) -> {Weight} = xlThin; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +InsideHorizontal) -> {LineStyle} = xlContinuous; $Sheet -> Range("$Start_col$Start_row:$End_col$End_row") -> Borders(xl +InsideHorizontal) -> {Weight} = xlThin; #---- Conectarse a la base de datos para extraer la tabla de semanas #---- SEMANA ACTUAL ------- #my $datafilename = "d3"; my $dbh_semana1 = DBI->connect("DBI:mysql:database=$datafilename;host= +localhost", "root","xyz123", {'RaiseError'=>1}); if ( ! defined($dbh_semana1) ) { print STDERR "\n\nCould not open a connection to the database.\n\n +"; exit(); } my $sqlsemana1="SELECT SEMANA FROM semanas WHERE semana = (SELECT WEEK + (CURRENT_TIMESTAMP,1))"; my $sthsemana1 = $dbh_semana1->prepare($sqlsemana1); $sthsemana1->execute(); while (my $semana_row1 = $sthsemana1->fetch) { print "\nRELACION DE OPERACION CORRESPONDIENTES A LA SEMANA No. + @$semana_row1\n"; $Sheet->Cells(13,5)->{Value} = "Relacion de Operacion correspon +diente a la semanan No. @$semana_row1"; } #---- FECHA FINAL ------ #my $datafilename = "d3"; # my $dbh_semana2 = DBI->connect("DBI:mysql:database=$datafilename;host= +localhost", "root","xyz123", {'RaiseError'=>1}); if ( ! defined($dbh_semana2) ) { print STDERR "\n\nCould not open a connection to the database.\n\n +"; exit(); } my $sqlsemana2="SELECT FEC_FINAL FROM semanas WHERE semana = (SELECT W +EEK (CURRENT_TIMESTAMP,1))"; my $sthsemana2 = $dbh_semana2->prepare($sqlsemana2); $sthsemana2->execute(); while (my $semana_row2 = $sthsemana2->fetch) { print "\nCOMPRENDIDA DEL @$semana_row2\n"; $Sheet->Cells(11,7)->{Value} = "al @$semana_row2 "; } #---- FECHA INICIAL ----- #my $datafilename = "d3"; my $dbh_semana = DBI->connect("DBI:mysql:database=$datafilename;host=l +ocalhost", "root","xyz123", {'RaiseError'=>1}); if ( ! defined($dbh_semana) ) { print STDERR "\n\nCould not open a connection to the database.\n\n +"; exit(); } my $sqlsemana="SELECT FEC_INICIA FROM semanas WHERE semana = (SELECT W +EEK (CURRENT_TIMESTAMP,1))"; my $sthsemana = $dbh_semana->prepare($sqlsemana); $sthsemana->execute(); while (my $semana_row = $sthsemana->fetch) { # print "COMPRENDIDA DEL @$semana_row AL @$semana2_row"; $Sheet->Cells(11,5)->{Value} = "Comprendida del @$semana_row "; } ################### $Sheet->Range('A17')->Select(); $Sheet->Selection->Copy('A17'); $Sheet->Range('B15')->Select(); $Sheet->ActiveSheet->Paste(); ########################### $Excel -> {DisplayAlerts} = 0; # This turns off the "This file alre +ady exists" message. my $file2 = "M.$file"; print "este es el archivo : $file2\n\n\n"; $Book -> SaveAs("$file2"); $Book->Close();
The error message is this :
Win32::OLE(0.1707) error 0x80020003: "Member not found" in METHOD/PROPERTYGET "" at xxtest112.pl line 166 Can't call method "Copy" on an undefined value at xxtest112.pl line 16 +6.
I hope this can help, so that you can help me, thanks.

Replies are listed 'Best First'.
Re: Copy cell from excel
by roboticus (Chancellor) on Jan 25, 2008 at 04:18 UTC
    ArmandoG:

    You really don't give us much to go on, so I'm guessing it's an error in your program somewhere...

    • Where does $Sheet come from? This would be useful information so we could tell what kind of thing $Sheet is...
    • Is $Sheet defined? You'd be surprised at how often this can be the case
    • Do you have warnings & strict enabled? No? Those annoying error messages getting in the way?
    • What does the VB script look like? We don't know ... you could've made a poor translation of an oatmeal cookie recipe, but without the original VB code, how could we tell?
    • What error messages do you get? This would give us a clue as to what the problem is. Without that, I'm guessing that your computer is on fire or something.
    • Where's your code? I'm really not terribly interested in trying to write my own program to try to reproduce your error in order to help you fix it. If I did my program would probably work, and then I still couldn't tell you what's wrong.
    • What did you expect to happen? Sure, we could infer it from the meagre information given, but I'd hate to solve the wrong problem...
    • What *did* happen? Any clues could be helpful. Instead, you're scaring off potential helpers because you're making it too much work to help you.

    Well ... that's enough guessing games for me this evening...

    ...roboticus

    Obviously in one of his grumpier moods...