internetradio2.0/cenrep/excel_support.pm
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cenrep/excel_support.pm	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,184 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+###################################################
+###################################################
+# This module contains common helper functions for 
+# handling excel sheets from perl.
+###################################################
+###################################################
+package excel_support;
+
+##########################################
+# Libraries used
+##########################################
+use strict;
+use Win32::OLE qw(in with);
+use Win32::OLE::Const 'Microsoft Excel';
+use Exporter ();     # Needed to make constants available to caller.
+
+##########################################
+# Defining all the "global" variables, that we are using.
+##########################################
+use vars qw(
+            @ISA
+            @EXPORT
+            );
+
+
+@ISA = qw(Exporter); # Inherit from Exporter module (import method needed).
+
+# Define all the functions defined by this module
+use subs qw(
+	    getExcelApp
+	    quitExcelApp
+	    openWorkbook
+	    getWorkSheet
+	    getIndexByColName
+	    );
+
+##########################################
+# Define the exports from this module that can be used
+# Outside
+##########################################
+@EXPORT = qw(
+             &getExcelApp
+	     &quitExcelApp
+	     &openWorkbook
+	     &getWorkSheet
+	     &getIndexByColName
+             );
+
+
+###########################################################################
+# Function that creates an excel application and returns a reference to it.
+#
+# Params: -
+#
+# Return value: a reference to a excel application
+###########################################################################
+sub getExcelApp
+{
+    # get already active Excel application or open new
+    my $excel = Win32::OLE->GetActiveObject('Excel.Application') || 
+      Win32::OLE->new('Excel.Application', 'Quit');
+    
+    return \$excel;									    
+}
+
+###########################################################################
+# Function that deletes an excel application given
+#
+# Params: refToExcelApp
+#
+# Return value: a reference to a excel application
+###########################################################################
+sub quitExcelApp
+{
+    my $refToExcelApp = shift;
+
+    $$refToExcelApp->Quit();
+    # For some reason this needs to be done twice inorder to close the excel.
+    undef $$refToExcelApp;
+    undef $refToExcelApp;
+}
+
+###########################################################################
+# Function opens the given filename as workbook
+#
+# Params: Filename, referenceToExcelApp
+#
+# Return: reference to a workbook object 
+###########################################################################
+sub openWorkbook
+{
+    my $filename = shift;
+    my $refToExcel = shift;
+
+    # Open the workbook as read only
+    my $workBook = ${$refToExcel}->Workbooks->Open( { FileName => $filename, ReadOnly=> xlReadOnly } );
+    die "$filename: cannot open file\n" unless (defined $workBook );
+
+    return \$workBook;
+}
+
+###########################################################################
+# Function finds the wanted worksheet from the given workbook
+#
+# Params: referenceToWorkbook,wantedSheetName
+#
+# Return: reference to a worksheet object 
+###########################################################################
+sub getWorkSheet
+{
+    my $refToWb = shift;
+    my $wantedSheetName = shift;
+    
+    my $workSheet;
+
+    # Loop through all the workbooks and find a matching name.
+    for( my $i = 0; $i < $$refToWb->WorkSheets->Count; $i++)
+    {
+	# The index is from 1-> and the counter starts from 0 => +1.
+	$workSheet = $$refToWb->WorkSheets($i + 1);
+        if( $workSheet->Name eq $wantedSheetName ) 
+        {
+	    # match found, return reference to the found worksheet
+	    return \$workSheet;
+	}
+    }
+
+    # No match found, error, thus return undef.
+    return undef;
+}           
+
+
+###########################################################################
+# Function that finds the index of the column based on given name
+#
+# Params: referenceToWorksheet,
+#         wantedColName   (== the wanted column name)
+#         maxcolCount     (== how many columns are checked for the given name) 
+#
+# Return: index to Column, 
+#         -1, if no match found
+###########################################################################
+sub getIndexByColName
+{
+    my $refToWorksheet = shift;
+    my $colName = shift;
+    my $maxColCount = shift;
+    
+    my %i;
+    # loop through columns to find the index, which 
+    # matches to the given column name.
+    for( my $i = 1; $i < $maxColCount; $i++ )
+    {
+	# The headers are always in row 1.
+	my $colNameFromSheet = $$refToWorksheet->Cells( 1, $i  )->{ 'Value' };
+
+	# check the name against the given name. If same then return the index.
+        if($colName eq $colNameFromSheet)
+	{
+	    return $i;
+	}	       
+    }
+
+    # No match found, return -1 as an error.
+    return -1;
+}
+
+
+1;