Excel-Writer-XLSX
view release on metacpan or search on metacpan
lib/Excel/Writer/XLSX/Format.pm view on Meta::CPAN
# Copyright 2000-2025, John McNamara, jmcnamara@cpan.org
#
# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
#
# Documentation after __END__
#
use 5.008002;
use Exporter;
use strict;
use warnings;
use Carp;
our @ISA = qw(Exporter);
our $VERSION = '1.15';
our $AUTOLOAD;
###############################################################################
#
# new()
#
# Constructor
#
sub new {
my $class = shift;
my $self = {
_xf_format_indices => shift,
_dxf_format_indices => shift,
_xf_index => undef,
_dxf_index => undef,
_num_format => 'General',
_num_format_index => 0,
_font_index => 0,
_has_font => 0,
_has_dxf_font => 0,
_font => 'Calibri',
_size => 11,
_bold => 0,
_italic => 0,
_color => 0x0,
_underline => 0,
_font_strikeout => 0,
_font_outline => 0,
_font_shadow => 0,
_font_script => 0,
_font_family => 2,
_font_charset => 0,
_font_scheme => 'minor',
_font_condense => 0,
_font_extend => 0,
_theme => 0,
_hyperlink => 0,
_xf_id => 0,
_hidden => 0,
_locked => 1,
_text_h_align => 0,
_text_wrap => 0,
_text_v_align => 0,
_text_justlast => 0,
_rotation => 0,
_fg_color => 0x00,
_bg_color => 0x00,
_pattern => 0,
_has_fill => 0,
_has_dxf_fill => 0,
_fill_index => 0,
_fill_count => 0,
_border_index => 0,
_has_border => 0,
_has_dxf_border => 0,
_border_count => 0,
_bottom => 0,
_bottom_color => 0x0,
_diag_border => 0,
_diag_color => 0x0,
_diag_type => 0,
_left => 0,
_left_color => 0x0,
_right => 0,
_right_color => 0x0,
_top => 0,
_top_color => 0x0,
_indent => 0,
_shrink => 0,
_merge_range => 0,
_reading_order => 0,
_just_distrib => 0,
_color_indexed => 0,
_font_only => 0,
_quote_prefix => 0,
};
bless $self, $class;
# Set properties passed to Workbook::add_format()
$self->set_format_properties(@_) if @_;
return $self;
}
###############################################################################
#
# copy($format)
#
# Copy the attributes of another Excel::Writer::XLSX::Format object.
#
sub copy {
lib/Excel/Writer/XLSX/Format.pm view on Meta::CPAN
&& $self->{_text_h_align} != 7
&& $self->{_text_v_align} != 1
&& $self->{_text_v_align} != 3
&& $self->{_text_v_align} != 5 )
{
$self->{_text_h_align} = 1;
}
# Check for properties that are mutually exclusive.
$self->{_shrink} = 0 if $self->{_text_wrap};
$self->{_shrink} = 0 if $self->{_text_h_align} == 4; # Fill
$self->{_shrink} = 0 if $self->{_text_h_align} == 5; # Justify
$self->{_shrink} = 0 if $self->{_text_h_align} == 7; # Distributed
$self->{_just_distrib} = 0 if $self->{_text_h_align} != 7; # Distributed
$self->{_just_distrib} = 0 if $self->{_indent};
my $continuous = 'centerContinuous';
push @align, 'horizontal', 'left' if $self->{_text_h_align} == 1;
push @align, 'horizontal', 'center' if $self->{_text_h_align} == 2;
push @align, 'horizontal', 'right' if $self->{_text_h_align} == 3;
push @align, 'horizontal', 'fill' if $self->{_text_h_align} == 4;
push @align, 'horizontal', 'justify' if $self->{_text_h_align} == 5;
push @align, 'horizontal', $continuous if $self->{_text_h_align} == 6;
push @align, 'horizontal', 'distributed' if $self->{_text_h_align} == 7;
push @align, 'justifyLastLine', 1 if $self->{_just_distrib};
# Property 'vertical' => 'bottom' is a default. It sets applyAlignment
# without an alignment sub-element.
push @align, 'vertical', 'top' if $self->{_text_v_align} == 1;
push @align, 'vertical', 'center' if $self->{_text_v_align} == 2;
push @align, 'vertical', 'justify' if $self->{_text_v_align} == 4;
push @align, 'vertical', 'distributed' if $self->{_text_v_align} == 5;
push @align, 'textRotation', $self->{_rotation} if $self->{_rotation};
push @align, 'indent', $self->{_indent} if $self->{_indent};
push @align, 'wrapText', 1 if $self->{_text_wrap};
push @align, 'shrinkToFit', 1 if $self->{_shrink};
push @align, 'readingOrder', 1 if $self->{_reading_order} == 1;
push @align, 'readingOrder', 2 if $self->{_reading_order} == 2;
return $changed, @align;
}
###############################################################################
#
# get_protection_properties()
#
# Return properties for an Excel XML <Protection> element.
#
sub get_protection_properties {
my $self = shift;
my @attribs;
push @attribs, 'locked', 0 if !$self->{_locked};
push @attribs, 'hidden', 1 if $self->{_hidden};
return @attribs;
}
###############################################################################
#
# get_format_key()
#
# Returns a unique hash key for the Format object.
#
sub get_format_key {
my $self = shift;
my $key = join ':',
(
$self->get_font_key(), $self->get_border_key,
$self->get_fill_key(), $self->get_alignment_key(),
$self->{_num_format}, $self->{_locked},
$self->{_hidden},
$self->{_quote_prefix},
);
return $key;
}
###############################################################################
#
# get_font_key()
#
# Returns a unique hash key for a font. Used by Workbook.
#
sub get_font_key {
my $self = shift;
my $key = join ':', (
$self->{_bold},
$self->{_color},
$self->{_font_charset},
$self->{_font_family},
$self->{_font_outline},
$self->{_font_script},
$self->{_font_shadow},
$self->{_font_strikeout},
$self->{_font},
$self->{_italic},
$self->{_size},
$self->{_underline},
$self->{_theme},
);
return $key;
}
###############################################################################
#
# get_border_key()
#
# Returns a unique hash key for a border style. Used by Workbook.
#
sub get_border_key {
my $self = shift;
my $key = join ':', (
$self->{_bottom},
$self->{_bottom_color},
$self->{_diag_border},
$self->{_diag_color},
$self->{_diag_type},
$self->{_left},
$self->{_left_color},
$self->{_right},
$self->{_right_color},
$self->{_top},
$self->{_top_color},
( run in 0.750 second using v1.01-cache-2.11-cpan-39bf76dae61 )