Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 90815a31

Von Joachim Zach vor fast 15 Jahren hinzugefügt

  • ID 90815a31b45ced8f49c31502cff1c8155e692a7a
  • Vorgänger bedf5ec6
  • Nachfolger 4236c151

Optionale minimale Excel-Unterstützung für Druckvorlagen (Austausch von Platzhalter-Variablen in Excel-Dateien). Entsprechend noch für strict angepasst

Unterschiede anzeigen:

SL/Template.pm
return 1;
}
##########################################################
####
#### ExcelTemplate
####
##########################################################
package ExcelTemplate;
use vars qw(@ISA);
@ISA = qw(SimpleTemplate);
sub new {
my $type = shift;
my $self = $type->SUPER::new(@_);
return $self;
}
sub _init {
my $self = shift;
$self->{source} = shift;
$self->{form} = shift;
$self->{myconfig} = shift;
$self->{userspath} = shift;
$self->{error} = undef;
$self->set_tag_style('<<', '>>');
}
sub get_mime_type() {
my ($self) = @_;
return "application/msexcel";
}
sub uses_temp_file {
return 1;
}
sub parse {
$main::lxdebug->enter_sub();
my $self = shift;
local *OUT = shift;
my $form = $self->{"form"};
open(IN, "$form->{templates}/$form->{IN}") or do { $self->{"error"} = "$!"; return 0; };
my @lines = <IN>;
close IN;
my $contents = join("", @lines);
my @indices;
$contents =~ s{
$self->{tag_start} [<]* (\s?) [<>\s]* ([\w\s]+) [<>\s]* $self->{tag_end}
}{
$self->format_vars(align_right => $1 ne '', varstring => $2, length => length($&), indices => \@indices)
}egx;
if (!defined($contents)) {
$main::lxdebug->leave_sub();
return 0;
}
print OUT $contents;
$main::lxdebug->leave_sub();
return 1;
}
sub format_vars {
my ($self, %params) = @_;
my $form = $self->{"form"};
my @indices = @{ $params{indices} };
my $align_right = $params{align_right};
my $varstring = $params{varstring};
my $length = $params{length};
$varstring =~ s/(\w+)/ $self->_get_loop_variable($1, 0, @indices) /eg;
my $old_string=$varstring;
my $new_string = sprintf "%*s", ($align_right ? 1 : -1 ) * $length, $varstring;
if (!defined($new_string) || $new_string eq ''){
$main::lxdebug->message(0, 'varstring' . $varstring . "old" . $old_string);
# return substr $varstring, ($align_right ? (0, $length) : -$length);
}
return substr $new_string, ($align_right ? (0, $length) : -$length);
}
1;

Auch abrufbar als: Unified diff