• Publicidad

Asociar rango y color a celdas de archivo Excel

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Asociar rango y color a celdas de archivo Excel

Notapor lis » 2017-06-13 20:42 @904

Hola a todos.

Tengo el siguiente código que lee un rango de celdas fijo de un archivo Excel con datos del índice de radiación ultravioleta (UV). Tiene escrito las palabras: Bajo, Moderado, Alto, Muy Alto y Extremo.

El asunto es que no logro que imprima una celda en particular y le asocie un color y un rango de números. Por ejemplo: si la celda que está en la columna 3 y fila 25 tiene escrito "Moderado" que también imprima el rango (en este caso 3 - 5) y el color que le corresponde, es decir el amarillo. Hasta ahora solo puedo hacer que lea el contendido de una celda pero no asociarlo al color y rango respectivo. Les agradezco mucho su ayuda.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use Spreadsheet::Read;
  6.  
  7. my $ref   = ReadData("Libro1.xls");
  8. my $sheet = $ref->[1]->{cell};
  9.  
  10. #
  11. my ( $rango, $color, $rangos, $colors, @rango, @color, $uv );
  12.  
  13. @rango = ( "1 - 2", "3 - 5",    "6 - 7",   "8 - 10", "11+" );
  14. @color = ( 'verde', 'amarillo', 'naranjo', 'rojo',   'purpura' );
  15.  
  16. for my $columna ( 3, 6, 9 ) {
  17.     for my $fila ( 25, 39, 53 ) {
  18.  
  19.         $uv = $sheet->[$columna]->[$fila];
  20.  
  21.         if ( $uv eq 'Bajo' )     { $rangos = $rango[0] and $colors = $color[0]; }
  22.         if ( $uv eq 'Moderado' ) { $rangos = $rango[1] and $colors = $color[1]; }
  23.         if ( $uv eq 'Alto' )     { $rangos = $rango[2] and $colors = $color[2]; }
  24.         if ( $uv eq 'Muy_Alto' ) { $rangos = $rango[3] and $colors = $color[3]; }
  25.         if ( $uv eq 'Extremo' )  { $rangos = $rango[4] and $colors = $color[4]; }
  26.     }
  27. }
  28.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Re: Asociar rango y color a celdas de archivo Excel

Notapor explorer » 2017-06-14 07:23 @349

Sustituye los 'and' de las líneas 21 a 25 por caracteres ';'. De esa manera separas las dos sentencias de cada línea.

Esta es otra versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Spreadsheet::Read;
  5.  
  6. my $ref   = ReadData("Libro1.xls");
  7. my $sheet = $ref->[1]{cell};
  8.  
  9. my %rango = (
  10.         Bajo            => "1 - 2",
  11.         Moderado        => "3 - 5",
  12.         Alto            => "6 - 7",
  13.         Muy_Alto        => "8 - 10",
  14.         Extremo         => "11+",
  15. );
  16. my %color = (
  17.         Bajo            => 'verde',
  18.         Moderado        => 'amarillo',
  19.         Alto            => 'naranjo',
  20.         Muy_Alto        => 'rojo',
  21.         Extremo         => 'purpura',
  22. );
  23.  
  24. for my $columna ( 3, 6, 9 ) {
  25.     for my $fila ( 25, 39, 53 ) {
  26.  
  27.         my $uv = $sheet->[$columna][$fila];
  28.  
  29.         my $rangos = $rango{ $uv };
  30.         my $colors = $color{ $uv };
  31.  
  32.         ...;
  33.     }
  34. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Incluso aún más breve:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Spreadsheet::Read;
  5.  
  6. my $ref   = ReadData("Libro1.xls");
  7. my $sheet = $ref->[1]{cell};
  8.  
  9. my %rango_color = (
  10.         Bajo            => [ "1 - 2",   'verde'         ],
  11.         Moderado        => [ "3 - 5",   'amarillo'      ],
  12.         Alto            => [ "6 - 7",   'naranjo'       ],
  13.         Muy_Alto        => [ "8 - 10",  'rojo'          ],
  14.         Extremo         => [ "11+",     'purpura'       ],
  15. );
  16.  
  17. for my $columna ( 3, 6, 9 ) {
  18.     for my $fila ( 25, 39, 53 ) {
  19.  
  20.         my $uv = $sheet->[$columna][$fila];
  21.  
  22.         my($rangos, $colors) = @{ $rango_color{$uv} };
  23.     }
  24. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados