Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^3: Unable to compare 2 arrays from 2 separate columns of separate sheets.

by choroba (Archbishop)
on Feb 09, 2021 at 20:05 UTC ( #11128144=note: print w/replies, xml ) Need Help??


in reply to Re^2: Unable to compare 2 arrays from 2 separate columns of separate sheets.
in thread Unable to compare 2 arrays from 2 separate columns of separate sheets.

You should fix the indentation. Also, SSCCE should compile, but yours doesn't, as it contains several undeclared variables. I was able to fix it, I also created an input XLSX document with two sheets, one of them called AD-Data containing
1 123456789 2 123456790 3 123456791 4 123456792 5 123456793 6 123456794 7 123456795 8 123456796
and another called syslog_-prod containing
1 2 6 123456789 11 123456790 16 123456791 21 123456792 26 123456793 31 123456794 36 123456795 41 123456796
Running the edited code
#!/usr/bin/perl use strict; use warnings; use Spreadsheet::ParseXLSX; use Excel::Writer::XLSX; my $parser = Spreadsheet::ParseXLSX->new; my $workbook1 = $parser->parse('input.xlsx'); if ( !defined $workbook1 ) { die $parser->error, ".\n"; } my $workbook = Excel::Writer::XLSX->new( 'output.xlsx' ); my $worksheet = $workbook->add_worksheet; my $Synchrony_format = $workbook->add_format( bold => 0, color => 'green', size => 16, ); my $my_format = $workbook->add_format( bold => 1, color => 'blue', size => 18, ); my $appsshhetname = "syslog_-prod"; my $ADdata = "AD-Data"; my $row_min = 1; my $row_max = 5; my $col_min = 1; my $col_max = 3; my $r = 1; my @cellA; for my $worksheet1 ($workbook1->worksheets) { $worksheet->write(0, 0, 'AD Match' , $my_format); $worksheet->write(0, 2, 'AD MATCH' , $Synchrony_format); $worksheet->write(0, 3, 'Creation Date' , $Synchrony_format); my $appssheet = $worksheet1->get_name; for my $row ( $row_min .. $row_max ) { for my $col ( $col_min = 0) { if ( $appssheet eq $appsshhetname ) { my $cell = $worksheet1->get_cell( $row, 1 ); next unless $cell; my $cellA = $cell->value; $cellA =~ s/@(AD.ABC.COM)//g; push @cellA, $cellA if $cellA=~ /(\d{9})/; } my %params = map { $_ => 1 } @cellA; my @uniq = keys %params; if ( $appssheet eq $ADdata ) { for my $row1 ( $row_min .. $row_max ) { for my $col1 ( $col_min = 1) { my $cellB = $worksheet1->get_cell( $row, 1 ); next unless $cellB; my $cellC = $cellB->value; $worksheet->write($r, 0, $cellC) if exists $pa +rams{$cellC}; } } $r += 1; } } } }

I got no errors nor warnings and the output file was created with a coloured header and the following contents in the first column:

123456790 123456791 123456792 123456793
but formatted as 1.23E+08.

Sorry, what was your question again?

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^4: Unable to compare 2 arrays from 2 separate columns of separate sheets.
by chandantul (Beadle) on Feb 10, 2021 at 05:18 UTC

    The infinity loop for the below comparison code is my issue. The ADdata sheet first column contain 1-30000 users data and prod_log sheet contain around 501 entries of users those are Nonunique . I will need to collect unique entries from prod_log first column and compare against ADdata sheet first column and update the existing entries of the same file and update the match to other file. The above code seems to be not working. need some suggestion or code snippet.

    for my $worksheet1 ( $workbook1->worksheets() ) { my ( $row_min , $row_max) = $worksheet1->row_range(); my ($col_min, $col_max) = $worksheet1->col_range(); $worksheet->write(0, 0, 'AD Match' , $my_format); $worksheet->write(0, 1, 'APP STATUS' , + $my_format); $worksheet->write(0, 2, 'APP LABEL' , +$my_format); my $appssheet = $worksheet1->get_name(); print "APP Sheet name: $appssheet . \n"; for my $row ( $row_min .. $row_max ) { for my $col ( $col_min = 0) { if ( $appssheet eq $appsshhetname ) { my $cell = $worksheet1->get_cell( $row, 0 ); next unless $cell; my $cellA = $cell->value; push @cellA, $cellA ; # push @cellA, $cellA if $cellA=~ /(\d{9})/; } my %params = map { $_ => 1 } @cellA; my @uniq = keys %params; if ( $appssheet eq $ADdata ) { for my $row1 ( $row_min .. $row_max ) { for my $col1 ( $col_min = 0) { my $cellB = $worksheet1->get_cell( $row, 0 ); next unless $cellB; my $cellC = $cellB->value; $cellC =~ s/@(AD.ABC.COM)//g; print "USERS: $cellC\n"; $worksheet->write($r, 0, $cellC) if exists $pa +rams{$cellC}; } } $r += 1; } } } }

      This works after making modification for loop scope of writer in excel, i have separated the parser with excel writer for loop that wors for me.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11128144]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (7)
As of 2021-04-12 20:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?