Excel to MARC

[email protected] (Saiful Amin)
Newsgroups perl.perl4lib
Message-ID <[email protected]>
Greetings,

I recently wrote some code for Excel to MARC conversion. The script doesn't
require Excel to be installed, so it should work just fine on Unix boxes
(not tested though).

#!c:\perl\bin\perl.exe
# xl2m.pl
# Convert Excel data into valid MARC21 records

use strict;
use warnings;
use MARC::Record;
use Spreadsheet::ParseExcel::Simple;

# Open the Excel file
my $fh;
unless ( $fh = Spreadsheet::ParseExcel::Simple->read( $ARGV[0] ) ) {
    die "No input Excel file.\n";
} else {
    print "Preparing MARC records ... \n\n";
}

# Open the Output filehandle
open( OUT, ">$ARGV[1]" );
binmode OUT, ":encoding(UTF-8)"; # Handle UTF-8 data sans warnings

my $rec_num = 0;

# Open the worksheet
foreach my $sheet ( $fh->sheets ) {
    while ( $sheet->has_data ) {
        my @row = $sheet->next_row;
        $rec_num++;
        my $bib_id    = $row[0];
        my $title    = $row[1];
        #[...]

        my $record = MARC::Record->new();
        $record->leader('00054nam a22002891a 4500');

        # Create the tags
        if ($title) {
            $record->append_fields(
                MARC::Field->new( '245', 1, 0, 'a' => $title )
            );
        }
        # [...]
        print OUT $record->as_usmarc();
        print ".";
    }
}
close(OUT);

print "\n\n$rec_num records created.\n";


I happened to see the Swollen Appendices section in the MARC::Doc::Tutorial
where the Excel section was empty. I guess this one can find a place there.

Regards,
Saiful
-- 
Saiful Amin
+91-9343826438
xl2m.pl (application/octet-stream, 1 KB)
#!c:\Perl\bin\perl.exe
# xl2m.pl 
# Convert Excel data into valid MARC21 records

use strict;
use warnings;
use MARC::Record;
use Spreadsheet::ParseExcel::Simple;

# Open the Excel file
my $fh;
unless ( $fh = Spreadsheet::ParseExcel::Simple->read( $ARGV[0] ) ) {
	die "No input Excel file.\n";
} else {
	print "Preparing MARC records ... \n\n";
}

# Open the Output filehandle
open( OUT, ">$ARGV[1]" );
binmode OUT, ":encoding(UTF-8)"; # Handle UTF-8 data sans warnings

my $rec_num = 0;

# Open the worksheet
foreach my $sheet ( $fh->sheets ) {
	while ( $sheet->has_data ) {
		my @row = $sheet->next_row;
		$rec_num++;
		my $bib_id	= $row[0];
		my $title	= $row[1];
		#[...]

		my $record = MARC::Record->new();
		$record->leader('00054nam a22002891a 4500');
		
		# Create the tags
		if ($title) {
			$record->append_fields(
				MARC::Field->new( '245', 1, 0, 'a' => $title )
			);
		}
		# [...]
		print OUT $record->as_usmarc();
		print ".";
	}
}
close(OUT);

print "\n\n$rec_num records created.\n";
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.