The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

###############################################################################
#
# Example of how to use the WriteExcel module to write internal and internal
# hyperlinks.
#
# If you wish to run this program and follow the hyperlinks you should create
# the following directory structure:
#
#     C:\ -- Temp --+-- Europe
#                   |
#                   \-- Asia
#
#
# See also hyperlink1.pl for web URL examples.
#
# reverse('©'), February 2002, John McNamara, jmcnamara@cpan.org
#


use strict;
use Spreadsheet::WriteExcel;

# Create three workbooks:
#   C:\Temp\Europe\Ireland.xls
#   C:\Temp\Europe\Italy.xls
#   C:\Temp\Asia\China.xls
#
my $ireland   = Spreadsheet::WriteExcel->new('C:\Temp\Europe\Ireland.xls');
my $ire_links = $ireland->add_worksheet('Links');
my $ire_sales = $ireland->add_worksheet('Sales');
my $ire_data  = $ireland->add_worksheet('Product Data');

my $italy     = Spreadsheet::WriteExcel->new('C:\Temp\Europe\Italy.xls');
my $ita_links = $italy->add_worksheet('Links');
my $ita_sales = $italy->add_worksheet('Sales');
my $ita_data  = $italy->add_worksheet('Product Data');

my $china     = Spreadsheet::WriteExcel->new('C:\Temp\Asia\China.xls');
my $cha_links = $china->add_worksheet('Links');
my $cha_sales = $china->add_worksheet('Sales');
my $cha_data  = $china->add_worksheet('Product Data');

# Add a format
my $format = $ireland->add_format(color => 'green', bold => 1);
$ire_links->set_column('A:B', 25);


###############################################################################
#
# Examples of internal links
#
$ire_links->write('A1', 'Internal links', $format);

# Internal link
$ire_links->write('A2', 'internal:Sales!A2');

# Internal link to a range
$ire_links->write('A3', 'internal:Sales!A3:D3');

# Internal link with an alternative string
$ire_links->write('A4', 'internal:Sales!A4', 'Link');

# Internal link with a format
$ire_links->write('A5', 'internal:Sales!A5', $format);

# Internal link with an alternative string and format
$ire_links->write('A6', 'internal:Sales!A6', 'Link', $format);

# Internal link (spaces in worksheet name)
$ire_links->write('A7', q{internal:'Product Data'!A7});


###############################################################################
#
# Examples of external links
#
$ire_links->write('B1', 'External links', $format);

# External link to a local file
$ire_links->write('B2', 'external:Italy.xls');

# External link to a local file with worksheet
$ire_links->write('B3', 'external:Italy.xls#Sales!B3');

# External link to a local file with worksheet and alternative string
$ire_links->write('B4', 'external:Italy.xls#Sales!B4', 'Link');

# External link to a local file with worksheet and format
$ire_links->write('B5', 'external:Italy.xls#Sales!B5', $format);

# External link to a remote file, absolute path
$ire_links->write('B6', 'external:c:/Temp/Asia/China.xls');

# External link to a remote file, relative path
$ire_links->write('B7', 'external:../Asia/China.xls');

# External link to a remote file with worksheet
$ire_links->write('B8', 'external:c:/Temp/Asia/China.xls#Sales!B8');

# External link to a remote file with worksheet (with spaces in the name)
$ire_links->write('B9', q{external:c:/Temp/Asia/China.xls#'Product Data'!B9});


###############################################################################
#
# Some utility links to return to the main sheet
#
$ire_sales->write('A2', 'internal:Links!A2', 'Back');
$ire_sales->write('A3', 'internal:Links!A3', 'Back');
$ire_sales->write('A4', 'internal:Links!A4', 'Back');
$ire_sales->write('A5', 'internal:Links!A5', 'Back');
$ire_sales->write('A6', 'internal:Links!A6', 'Back');
$ire_data-> write('A7', 'internal:Links!A7', 'Back');

$ita_links->write('A1', 'external:Ireland.xls#Links!B2', 'Back');
$ita_sales->write('B3', 'external:Ireland.xls#Links!B3', 'Back');
$ita_sales->write('B4', 'external:Ireland.xls#Links!B4', 'Back');
$ita_sales->write('B5', 'external:Ireland.xls#Links!B5', 'Back');
$cha_links->write('A1', 'external:../Europe/Ireland.xls#Links!B6', 'Back');
$cha_sales->write('B8', 'external:../Europe/Ireland.xls#Links!B8', 'Back');
$cha_data-> write('B9', 'external:../Europe/Ireland.xls#Links!B9', 'Back');