# Adapted from and inspired by # http://www.perlmonks.com/?node_id=514384, Dec 06, 2005, awohld use strict; use Spreadsheet::ParseExcel::Simple; use Win32::OLE; # --------------------------------------------------------- # Parameter 1: Name of Excel File to be Access-ized my $ExcelFile = $ARGV[0]; # Parameter 2: Name of Table to be created my $AccessTable = $ARGV[1]; # Parameter 3: Name of predefined DSN for preexisting Access .mdb file my $DSN = $ARGV[2]; # --------------------------------------------------------- my $first_row = 1; my @fields; my $SQL; my $conn = Win32::OLE->new('ADODB.Connection'); $conn->open($DSN); my $xls = Spreadsheet::ParseExcel::Simple->read($ExcelFile); foreach my $sheet ($xls->sheets) { while ($sheet->has_data) { my @data = $sheet->next_row; # For the first row, create a new table and use its data for +the header row if ($first_row) { foreach my $head (@data) { $head =~ s/[^a-zA-Z]//g; push(@fields, $head); } $SQL = "CREATE TABLE `". $AccessTable . "` (" . join( " varchar(255),", @fields) . " varchar(255))"; $conn->execute($SQL); $first_row = 0; } # Insert all other row data in the table else { $SQL = "INSERT INTO " . $AccessTable . " (" . join (',',@fields) . ") VALUES (\'" . join ('\',\'', @data) . "');"; $conn->execute($SQL); } } } print "That didn't go so well: ", Win32::OLE->LastError(), "\n" if (Win32::OLE->LastError()); $conn->close if ($conn); exit;
Edit: g0n - moved from SoPW to CUFP
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Transforming an Excel Spreadsheet into an Access Table
by holli (Abbot) on Dec 08, 2005 at 18:17 UTC | |
|
Re: Transforming an Excel Spreadsheet into an Access Table
by InfiniteSilence (Curate) on Dec 08, 2005 at 20:05 UTC | |
|
Re: Transforming an Excel Spreadsheet into an Access Table
by jfroebe (Parson) on Dec 08, 2005 at 17:40 UTC | |
|
Re: Transforming an Excel Spreadsheet into an Access Table
by Anonymous Monk on Dec 28, 2005 at 13:44 UTC |