Excel to Access Converter Utility Manual

Embed Size (px)

Citation preview

  • 7/29/2019 Excel to Access Converter Utility Manual

    1/29

    Excel to Access Converter Utility - User Manual

    Excel to Access Converter Utility

    USER MANUALVersion 1.0 14 October 2007

    For use with Microsoft Office Professional 2003

    IntroductionThis utility is designed to help convert an Excel spreadsheet file into a set of tables which can be importedinto an Access database file as properly normalised tables. Although it is primarily designed forspreadsheet type data it can be used to convert any flat file type database format into an Access database.For example, a Microsoft Works database or another Access database which has not been designedcorrectly can be converted by first exporting the flat file data to a spreadsheet (it may need to be savedas .csv file first and then importing that into the spreadsheet) and then importing the spreadsheet file intothe Excel to Access Converter Utility (EACU) program. It is also possible to import .csv or .txt filesdirectly into the program, if necessary.

    The EACU program will attempt to convert flat file data into one or more related tables but you shouldbear in mind that there are probably hundreds of different ways of creating a spreadsheet data file and itmay not be possible to extract the data in a way which can be converted to a proper normalised format.

    Note, however, this program does not analyse your spreadsheet file to determine which columns belong towhich table, that is something you have to do yourself based on the database requirements and it does notcreate the new database tables, fields and relationships. What it does do is extract the data from thespreadsheet file and copy that data into the appropriate tables and automatically create the relationshiplinks between the tables so that the end result is (hopefully) a properly normalised database schema.

    Program RequirementsTo use this utility you need to have Microsoft Office 2003 (including Microsoft Access 2003) installed onyour PC and the PC screen resolution must be 1024 x 768 or higher.

    InstallationTo install the program just create a new folder on your hard disk and unzip all the files from the Excel-Access.zip file into it. The four Excel files provided are just demo files and can be deleted once you havetried out the examples below. The Excel-Access Converter 2003.mde is the main database utility file andthe Excel-Access.ico file is the icon image which is displayed in the task bar when the program is in use.

    You can use a different image if you want to but just make sure the icon file has the same name and isstored in the same folder as the main program file.

    Page 1 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    2/29

    Excel to Access Converter Utility - User Manual

    OverviewThe basic idea of the program is relatively simple the data in each required column in the spreadsheet ismapped to a field in a table in your database. For example, if column A holds, say, the last name of acustomer in the spreadsheet then all the data in column A would be copied to a field called LastName in atable called Customers in your database. Column B might be the first name, so this data will copied tofield FirstName in the same table in your database.

    If the spreadsheet has other columns representing data which should be copied to other tables, forexample, a contact name which would be copied to a table called, say, Contacts, then the program willcopy the data to that table and automatically create a primary key and foreign key field in both tables inorder to establish a relationship between the two tables. Of course, it is not quite as simple as that but the

    program should cater for most types of spreadsheet formats that you may come across.

    The conversion process consists of three main stages :-

    Stage 1.

    Firstly you need to examine the spreadsheet file and determine which columns have what functions and inwhich table they should belong.

    At this stage you should design your new database layout based on the spreadsheet data and create thetables and fields you need. You should create any relationships between the tables (and it is a good idea toenter some dummy data to test the relationships). When you are happy with the database design delete anydummy data and make a note of the table and field names, you will need them later. Appendix A belowhas a printed form that you can use to make notes.

    Also at this stage you should clean up the data in the spreadsheet file as much as possible. For example,when using programs like MS Works and Excel, users tend to have an annoying habit of entering text in

    fields or cells which are not meant for text, i.e. entering comments in a date or currency field. Any fieldswhich have invalid data will be ignored by the program when the data is imported into the EACU maintable. In other words, make sure that all date columns have only valid dates (or are blank which isacceptable), similarly currency and numeric columns should have valid numbers in them.

    When you have a valid data file, create a new profile in the EACU program and import the data from thespreadsheet file. Note that you can create multiple profiles if you need to work on several database

    projects at the same time.

    Stage 2.

    When you have imported the data you need to create a template for the profile which determines which

    column from the spreadsheet is mapped to which field in which table. You should already know whichtables and fields you have created in the target database (from stage 1) so it is just a matter of entering thetable name, the field name, the type of field and the column name for each column that needs to beimported. You dont need to use every column in the spreadsheet, for example, any calculated cells inExcel should not normally need to be imported as any calculations can easily be done in the Accessdatabase.

    You would also create a Primary Key field in the main tables with a corresponding Foreign Key field inthe related tables (one to many) so that the conversion code can link the tables automatically.

    When you have completed the template you can convert the flat file data into two (or more) tables which

    are then saved to disk as two (or more) .csv files, i.e. one .csv file for each table. You could, of course, usethis program to convert a spreadsheet file to just one table but there is probably not much point in doingthis as you could import the data directly into Access if there is only one table involved.

    Page 2 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    3/29

    Excel to Access Converter Utility - User Manual

    Stage 3.

    When you have created your .csv files you can then open your new database and manually import thetable data one table at a time. You should first create the required tables in the database using exactly thesame field names in the database as you used in the EACU program (the table names can be different,however, although it would obviously be sensible to use the same or similar names). When importing thedata you should start with the highest level table, that is the one that does NOT have a Foreign Key field

    and then continue to the next level. This is to ensure that data is not added to a Foreign Key table beforethere is data in the Primary Key table when Referential Integrity is enforced.

    That is it, test your data to make sure everything is OK and the new database is ready to use.

    Section 1. Setting Up A ProfileTo start the program double click the Excel-Access Converter 2003.mde file as normal. The main formwill be displayed as shown in Figure 1 below. There are four profiles already added which are used todemonstrate how to use the program. When you are happy with how to use the program you can, ofcourse, delete these profiles.

    This section describes the main facilities available and how to use them, section 6 below will describehow to set up a template in more detail for the various types of spreadsheet files that you might have,using the demonstration Excel files provided with this document.

    Figure 1. Main form showing Source Data tab (the Source File Locations will be blank initially).

    When you want to start a new project you should first get your data into an Excel spreadsheet file (if itisnt already). For example, MS Works files can be exported as a .csv (its called Text & Commas inversion 4) and then imported into Excel and saved as a .xls file. Almost any other database data canusually be saved as .csv files or even directly into Excel files in some cases.

    When the data file is ready and saved to disk open the EACU program and create a new profile.

    Page 3 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    4/29

    Excel to Access Converter Utility - User Manual

    Create a New ProfileBefore you can import your data you must first create a Profile for this project. Click on the Add NewProfile button and enter a profile name in the pop-up form. Make sure the profile name does not alreadyexist and then clickOK. The new profile name will appear in the list and also in the Current Profile:field at the bottom of the form.

    Note that the first letter in each word in the name is capitalised so that if you enter something like newprofile, the name will be changed to New Profile. However, you may want to change the name formatif, for example, you wanted all capitals for one or more words. If you wanted a profile name of IBMCompanies you would get Ibm Companies when you clickOK. You can change the profile name byclicking in the Current Profile: field and then changing the name to whatever you want.

    Importing DataWhen you have created your profile you should now import the data from the spreadsheet file into theEACU program. Before you do this, however, you should first determine the Work Sheet name and whatcells in the spreadsheet hold the data that you need to use. You should also decide which columns need to

    be mapped to which fields/tables in the target database and the data type for each field. It is advisable towrite all this information down on paper first as it will make it easier when you start designing yourtemplate later, see Appendix A below for a handy tables/fields layout sheet.

    Importing Excel File Data

    Make sure the required profile is selected in the list (by clicking on it, if necessary), and then click theImport Data File button, find the .xls file in the standard file selector dialog box and click Open. Theform shown in Figure 2 below will be displayed.

    Figure 2. You will need to define the work

    sheet name and cell range for your Excelfile.

    Enter the work sheet name (if thespreadsheet has multiple work sheets youcan only work on one at a time). Then enterthe cell range, i.e. something like :- A 2 inthe Top Left Cell: fields and W 30 in theBottom Right Cell: fields and clickOK.

    When importing data you only need the raw data, if the file includes any field names, etc in the first one ortwo rows then you should omit these by selecting the first row with actual data.

    When data is imported into the EACU program it is first stored in a table that has 200 Text fields called F1to F200 (which represents columns A to GR in the spreadsheet file). If you have a spreadsheet file that hasmore than 200 columns then you will probably need to do some serious editing on the data before you canconvert it to an Access database file.

    You can display (and edit, if necessary) the imported data by clicking on the Imported Data tab, see nextsection for more details.

    Importing Text File DataYou can also import data directly from .csv or .txt files (provided they have been formatted as CommaSeparated Values). This is not normally recommended as it is very difficult to edit these files beforeimporting them but if the data has more than 65536 lines of data, it is not possible to save that many rows

    Page 4 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    5/29

    Excel to Access Converter Utility - User Manual

    in a spreadsheet file. In this case the Select Cell Range form shown above will not be displayed, the datawill be imported immediately. If the file has the first row set up as column header names you will need todelete that row first before converting the data to separate tables, see section 2 below for more details.

    If you attempt to import a new .csv file when there is already data stored in the import table, you will begiven the option of either replacing the existing data with the new data or appending the new data to the

    existing data. However, if you append the new data you must be sure that the field positions and data typesfor the existing data and the new data are identical or else the conversion code will fail later.

    Error Checks on Imported Data

    When Access imports data it checks the contents of each field and tries to determine whether the data isvalid based on the contents of previous records for the same field. For each record that it decides is invalidit creates an errors table and adds a record to that table. Unfortunately it doesnt store the data itselfanywhere, just the row number, field name and the type of error. However, even this information can beuseful when tracking down errors so this program allows you to display (and print) the error list if youwant to. If any errors were detected during the import operation the Show Import Errors button isenabled, click the button to show the Import Errors form shown in Figure 3 below.

    Figure 3. Form showing list of import errors.

    This form shows the name that Access allocated to the errors table in the Import Error Table Name:field and is for information only.

    The main list shows the errors detected together with information about each error. The Row No columnshows the row number in the spreadsheet file. Note that this is the actual row number even if the firstimported row was not the first row, as the displayed row number is calculated from the offset stored in the

    profile.

    The Field ID column shows the name of the field in the import table (i.e. F1 to F200) and the Columnfield shows the equivalent column name in the spreadsheet file. Note that the offset calculation does notapply here, even if you specified column D as the first column in the spreadsheet, the data is still stored infield F1 which corresponds to column A. For this reason it is advisable, if possible, to make sure your data

    starts at column A in the spreadsheet.

    The Field Type column would normally show the field type that you have allocated for this field in theprofile template. However, if you have not yet entered the template information (that is which fields are

    Page 5 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    6/29

    Excel to Access Converter Utility - User Manual

    allocated to which columns) then this field will show blank. After you have entered the template data youcould import the data again and these fields will show the data type for any columns that you are using inthe spreadsheet.

    The Error Type field shows the error type, which is usually Type Conversion Failure for thisapplication.

    Once you have defined a template for the profile, the program knows which columns are being used fromthe spreadsheet file so that if you import the data file again, and there are still errors in the data, then theImport Errors form will only show the errors for the columns that you are using. If you want to show allerrors, that is errors for the columns you are using plus any errors for the columns you dont need, thenyou can tick the Show All Errors tick box. In fact, if you display the errors before you have defined atemplate, the list will show no errors anyway (unless you tick this box). Click the Print Error List to

    preview and print the list of errors currently being displayed, click the Close Form button to return to themain form.

    Delete a ProfileTo delete a profile select the required profile in the list and click the Delete Profile button, clickYes toconfirm the deletion.

    Clone a ProfileIt can be useful, sometimes, to make a copy of a profile. For example, if you have created a complex

    profile and template and you then want to make some changes to it in order to try out a new table schema(or whatever) you may not want to make extensive changes to your template and then have to do them allagain if the new idea does not work.

    You can make a copy of the current profile by clicking the Clone Profile button. Enter a new profile name

    in the pop up form (make sure the new profile name does not already exist) and clickOK. The new profilewill be added to the list with all the same settings as the existing one.

    Edit a ProfileWhen you first create a new profile and import the data from the .xls file you will have set up the

    pathname, work sheet names and cell range, etc. If, at some time later, you need to change any of thosesettings you can do this by clicking the Edit Profile button to display the Edit Profile Definition formshown in Figure 4 below.

    Figure 4. Use this formto edit the profilesettings for any profiledefinition.

    You can change the profile name in the Profile Name: field as well as the sheet name and cell range. Ifyou need to change the location of the source file or destination folder, then click on the appropriate

    Page 6 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    7/29

    Excel to Access Converter Utility - User Manual

    Browse button and locate the file or folder, as appropriate. If you have imported a .csv or .txt file you canleave the fields in the Spreadsheet Cell Range section blank.

    Save a ProfileThis option allows you to save a profile definition to disk as a .csv file. This would be useful if, say, youwanted to send the template definition to a client so that they could convert their spreadsheet data after

    you have set it up for them or if you need to create a back up file of the profile for future use or whatever.

    To save the profile just click the Save Profile button and locate a suitable folder on the hard disk. Notethat the default filename is the same as the profile name but you can change this, if required, (butremember to keep the .csv extension). Note that the disk file only stores the template definitions and notthe source file name, destination folder name or spreadsheet work sheet name and cell range. This is

    because these could all be different if you send them to another user on a different PC (and it would makethe save code a lot more difficult).

    Load a Profile

    This is basically the opposite of the Save Profile option. Click the Load Profile button, locate the .csv filethat was saved under the previous section and clickOpen. If the profile name already exists you will beasked to provide a new profile name before it will load. When you have loaded the profile click on thename in the list and click the Edit Profile button to enter the various profile settings as detailed above.

    Print a Profile DefinitionClick the Print Profile button to preview and print the information for the current profile definition.

    Compact on CloseThe Compact on Close tick box is the same option that Access provides to compact the file when you exit

    the program. There are a number of tables which have their contents deleted each time you convert a fileor change profiles and some of them could be very big if you have a lot of data to convert. This will causeserious bloat for this file so it is probably a good idea to leave this box ticked. However, the reason I havemade it optional is because sometimes (according to the Access News Groups) this facility does notalways work correctly so you may want to turn it off if there are any problems (although I have not had a

    problem yet).

    Quit ApplicationClick the Quit Application button to exit and clickYes when asked for confirmation. Note that when yourun the program again, the imported data and all profile and template settings will be retained.

    Page 7 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    8/29

    Excel to Access Converter Utility - User Manual

    Section 2. Imported DataAfter importing your data file you can now look at the data by clicking on the Imported Data tab. Theform will look something like Figure 5 below.

    Figure 5. Typical display of imported raw data (with a lot more fields than this normally).

    Each field (F1 to F200) represents a column in the spreadsheet file, i.e. A to GR, the column letters aredisplayed with the field names. The example shown here is taken from the Northwind database (althoughthis configuration does not actually exist in Northwind).

    You should bear in mind that ALL the fields in this table are set up as Text fields which means that otherfield types will not be displayed as they normally would in an Access table. For example, currency fieldsmay be displayed as just numbers, say 2.5 instead of 2.50 or $2.50, Yes/No fields may be shown as -1 or0 (or TRUE or FALSE depending on the type of file). Date fields usually are shown the same. Note alsothat it is not possible to import text fields that have more than 255 characters (i.e. Memo size fields).

    Column WidthsAs this form is a standard DataSheet type form you can change the column widths in the usual way, i.e.clicking on the dividing line between columns on the header and dragging the mouse left or right.

    You can also click the Fit To Column Width button which will adjust all the visible columns to fit theamount of text in the widest field, note that this only applies to the rows currently displayed if you scrolldown the form you may have to repeat the operation. The Reset Column Widths button resets all widthsto the default value.

    Filter and Sort

    As with any standard Access form, you can sort ascending or descending on any column (using the rightmouse button or the tool-bar icons) and you can use the various Filter options provided by Access.

    Page 8 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    9/29

    Excel to Access Converter Utility - User Manual

    Print Imported DataTo help create a template for this data you can preview and print the records in this table showing the datain each column. Since the table could contain many thousands of records it is not useful to print them allso only the first five are shown. The idea is that the field names (and column letters) are shown on the leftof the print-out and the data from the first five records shown for each field. This makes it easier to seewhat data belongs to each table/field when you are entering the template codes.

    Note that the print out will only show the columns that you have imported, as specified in the cell rangefields in the profile.

    Editing Imported DataWhen you later convert the file to the various separate tables, the data in this table is used as the sourcedata. You can, if you want, change any of the fields in this table before you convert it in order to correctany minor errors in the data. However, this is not necessarily a good idea because you may change somedata and then, at a later stage, re-import the original data which will overwrite your modifications whichyou will then need to do again (if you remember to). If the imported data is not correct you should correct

    it in the original file and then re-import the file. The program remembers the pathname and filenames ofimported files so it only requires a couple of mouse clicks.

    Section 3. Template SettingsThis section will show how to enter the template settings and what the various buttons are used for. Thetechniques used to convert flat file data into normalised Access tables is described in more detail insection 6 below.

    Before you even start to enter the template information you must have a clear idea about which columns inyour spreadsheet should be mapped to which fields and in which tables in your target database. In additionto that you should also be clear on the relationship between the various tables that you have alreadycreated in the database. The EACU program will automatically create the data for the Primary Key andForeign Key fields as Long Integers, if you need some other type of relationship then you will need to dothat after you have converted the data and exported it to the target database.

    Using the example shown in Figure 5 above, fields F1, F2 and F3 (columns A, B and C) belong in tableEmployee and field F4 (column D) belongs in table Company. Dont worry about why this is for themoment, this section is only concerned about how to enter the template information, the reasons forchoosing fields and tables is covered in more detail in section 6 below.

    The tables will be linked by a one to many relationship provided by the program automatically usinganother field called EmployeeID.

    An example of a completed (very simple) template is shown below in Figure 6.

    Page 9 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    10/29

    Excel to Access Converter Utility - User Manual

    Figure 6. Typical template definition with only two tables.

    The idea is to create a new template record for each required column in the spreadsheet, the record willdefine which table and field the data from the spreadsheet is copied into. When the data is converted, the

    program copies the data from each record in the imported data table to another table which holds separaterecords for each table defined in the template (hopefully it will become clearer when you try out this

    example).

    Add and/or Delete Template RecordsTo add a new template record click in the Table Name field of the last record, marked with an asterisk,(or click the New Record icon on the Access tool-bar) and enter your table name, etc.

    To delete any record, select the record by clicking on the Record Selector button and then press theDELETE key or click the Delete Record icon on the Access tool-bar.

    Reset Sort Order

    You can enter the template records in any order but before they can be processed they need to be in aspecific order, that is alphabetically on table, field and field type. When you have entered all the requiredrecords (or at any time, in fact) click the Reset Order button to reset the sort order. Note that the exportedfields are sorted alphabetically on field names which may be different than that shown on this list (and

    probably different than the target database table order) but this will not matter, Access will copy the datato the correct fields when you import the data from the .csv files later.

    Error ChecksWhen you have entered all the template records you can click the Error Checks button to check for anyerrors in the imported data, i.e. date or numeric fields that have invalid data or for any invalid entries inthe template records. Note that all template fields coloured yellow should have some data in them. Whenyou run the Conversion operation this error check routine is always run first and the conversion operationwill not execute if there are any errors. Note, that as mentioned earlier, if there are any errors in the

    Page 10 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    11/29

    Excel to Access Converter Utility - User Manual

    imported data it is preferable to fix the problem in the spreadsheet file and re-import the data rather thanfix the error in the import table itself.

    Duplicates CheckIf a table is likely to contain duplicate records, the Group box should be ticked for each field that will bematched (see section 6 below for more details). In the example above the Title, FirstName and

    LastName fields are grouped because they are duplicated in the import table and we only need one recordfor each employee in the target table.

    To check if the duplicates boxes have been selected correctly you can check the table for duplicates. Firstclick in any record that has the Group field ticked and then click the Duplicates Checkbutton to displaythe form shown in Figure 7 below.

    Figure 7. Shows list ofduplicated records andthe number of duplicates for eachgroup.

    You can group up to four fields together in each table, in other words any imported records that haveidentical data in the grouped fields will be exported as one record. In the example above the three fieldsshown are grouped and so there is just one record for each employee, the Dups column shows how manyrecords there actually are for each employee. As a test, if you un-tick the FirstName field in this templateand display this form again, you will get just 11 employees shown because Mr. Andrew Fuller and Mr.Michael Fuller will be shown as Mr. Fuller with 14 duplicates which is obviously not correct.

    Usually four matching fields is enough to identify all unique records, if you need more then you will needto change the data in the spreadsheet to create a unique record.

    Convert Data to TablesWhen you have defined all the tables and fields required in your target database you need to convert theimported data into a set of tables which can then be exported as .csv files.If you have a very large number of records to convert, say more than two or three thousand, theconversion process will take some time. Initially you will probably want to try a few test runs to check ifthe data is being converted correctly. If you tick the Limit Records tick box and then run the conversionoperation, only the first 50 records will be processed. This should be enough to check if there are any

    problems with the template definition. You can also change the number of records processed by entering anew value in the To Records field. When you are happy with the template definition un-tick the LimitRecords box and run the converter again to process all the records.

    During the conversion process the Conv Time shows the number of seconds used and the Record Nofield shows the total number of records and counts down to zero as each imported record is processed.Also the progress bar at the bottom of the Access window shows the conversion progress. If you need to

    Page 11 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    12/29

    Excel to Access Converter Utility - User Manual

    stop the conversion process, click on the Abort Convert button, of course, the converted data will not bevalid if you do this.

    Save Converted Data as .CSV FilesWhen the data has been successfully converted you can export the various table data as .csv files to afolder on your hard disk which can then be imported into your new database file. Before you do this,

    however, you should first check the converted data on the Exported Data tab to ensure that the new datais OK, see next section for more details.

    To save the data click on the Save Data to .csv button. If you have not specified a destination for the .csvfiles the Browse for Folder dialog box will be displayed so that you can choose a location for the files (Iwould recommend using a separate folder for each profile), if you have already specified a folder, the fileswill be saved to the folder immediately and will overwrite any existing files with the same name.

    Each table will be saved as a separate file with the table name used as the filename, for example, in thetemplate definition shown above there will be two files saved as 1_Employee.csv and 2_Company.csv.The field names in each table will also be saved in the first line of the exported .csv file so that Access canmatch the field names when the files are imported into your new database file.

    See section 5 below for more information on importing the .csv files into an Access database.

    Section 4. Exported Data TablesWhen the imported data has been converted to one or more tables the converted data can be displayed onthe Exported Data tab. The Table Select drop down box allows you to select which table to display asshown in Figures 8 and 9 below.

    The Export .csv File Location field shows the location and name of the exported file and the columnheadings show the field names. Note that the fields are shown (and exported) in alphabetical order whichmay not be the order they appear on the template tab. It does not matter how the fields in the targetdatabase tables are arranged, however, Access will copy the data into the correct fields during the import

    process.

    Page 12 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    13/29

    Excel to Access Converter Utility - User Manual

    Figure 8. Exported Data tab showing contents of 1_Employee table.

    Figure 9. Exported Data tab showing contents of 2_Company table.

    As with any Access form in datasheet mode, you can sort the records on any field and use the variousfilter options provided by Access. Note that when you change to a different table, the sort option and field

    widths, etc remain the same for the new table so you may need to change the settings for a new table.Normally you would only need to see this form to check that your data has been converted correctly.

    Page 13 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    14/29

    Excel to Access Converter Utility - User Manual

    Section 5. Importing the Table Files into an Access DatabaseWhen you have created a .csv file for each table you can import the data into your database. This is astandard Access facility but I will describe it here as there are a few points to bear in mind.

    There are two basic options available, you can import the data into a database that does NOT already havethe tables defined (Access will then create them for you) or you can create your tables first and then

    import the data directly into them.

    The first option has the advantage that you dont have to create all your tables first, you can let Access doit for you, however, it has the disadvantage that after you have imported the data you will have to gothrough each table and change the name of the table (if you have used a different name for the .csv file),change the field types to the required type (Access makes them all Text fields), re-order the fields (ifrequired), index the primary keys where necessary and create the relationships between tables.

    With the second option you would create all your tables and relationships first and then import the datadirectly into the tables (make sure you delete any test records first). In this case you need to make sure thatyou import the tables with the Primary Key fields first, if you import a table with a foreign key and thereis no data in the table with the related primary key the data will not import.

    Import a .csv FileTo import a file open your new database file and click on File > Get External Data > Import In theFile Selector dialog change the File of type field to Text File (*.txt,*.csv,*.tab,*.asc). Locate the .csvfiles created earlier, select the first one to be imported and click Import to display the form shown inFigure 10 below.

    You should not need to make any changes on the pageso clickNext > to move to the next page of the Wizard

    as shown in Figure 11 below.

    Figure 10. First page of Import Text Wizard.

    On this page you need to tick the First Row ContainsField Names box so that Access can identify the fieldnames in the .csv files. The delimiter should default toComma for these files.

    Click the Next > button again to move to the next pageof the Wizard, the form shown in Figure 12 below will

    then be displayed.

    Figure 11. Second page of Import Text Wizard.

    Page 14 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    15/29

    Excel to Access Converter Utility - User Manual

    If you have not yet created the new tables then justclick the Finish button, Access will create a table withthe same name as the .csv filename and import the datainto it immediately. As mentioned above, you shouldthen change the table name, if required, and check eachfield to make sure it is the correct type for the data. If it

    is a Number field type you may also need to change thevarious field parameters since these fields normallydefault to Long Integer size.

    If you have already created the table click the In anExisting Table option and select the tablename in thedrop down box. Click the Finish button to import thedata into the table.

    Figure 12. Third page of Import Text Wizard.

    If you are allowing Access to create the new tables, instead of clicking the Finish button at this stage youcould go to the next page and define the field types there before importing the data but for this operation,where you will have several tables to change, it is probably quicker to do those changes in the tablesthemselves. Note that Access automatically creates AutoNumber fields on new tables, if you havedefined a primary key field in your table you can delete the AutoNumber field since there is not much

    point in having two primary key fields in the same table.

    Once the data has been imported successfully the database should be ready to use.

    Section 6. Defining Template Configurations

    This section will look at Templates in more detail and show how different spreadsheet configurations canbe converted to one or more Access tables. For the program to have any chance of converting aspreadsheet file into a properly normalised set of Access tables the original data must be consistent andwell defined. If the required data is scattered all over the spreadsheet rows and columns with data typesmixed (dates and text comments in the same column, for example) then it will be almost impossible toextract the data satisfactorily. You should start by examining the spreadsheet data and tidy up any cellsthat have invalid data in them for the data type required. Also it is a good idea to delete any blank rowsfirst otherwise they may get imported as blank records. Any columns which are not required in thedatabase such as calculated columns can be left as you can ignore those columns when defining thetemplate.

    The spreadsheet files shown below are just some made up samples that demonstrate the techniques used,you may need to use a bit of imagination (and a lot of trial and error) if your own files do not exactlymatch these examples.

    The four example spreadsheet files are included with this document so that you can try out these examplesif you want to.

    Example 1. Employee Company, (One to Many Relationship)This example has just four columns in the spreadsheet, columns A to D, and is supposed to represent a listof employees in a company and each employee acts as a contact for one or more companies who are thecustomers. Figure 13 below shows the spreadsheet has been set up so that every time an employee wasallocated to a new company, a new record was added to the spreadsheet with the employee name and thename of the customers company in the same row. As you can see from the list, Ms Janet Leverling has

    Page 15 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    16/29

    Excel to Access Converter Utility - User Manual

    companies called Ana Trujillo Emparedados y helados, Antonio Moreno Taquera, Bottom-DollarMarkets and Chop-suey Chinese (as well as a few more).What is obviously required here is a table for employees with one record for each employee and a secondtable for the companies in a One to Many relationship. You would build the template (starting with a

    blank template) as follows. Note that the completed template for this example is shown in Figure 6 above.

    Take one column at a time click in the Table Name column and enter the name of the table in which tostore the data from columns A-C in the spreadsheet (fields F1-F3). You can actually enter any name youlike in this field, in other words it doesnt have to match the name of the table that you are using in thetarget database, although it should be the same or similar to make the import easier. I would recommendthat you prefix the table name with a number starting at 1, the reason being that the list of template recordsare ordered on table name and it is much easier to visualise the table layout if you have the tables with the

    primary keys shown first in the list. This table (Employees) will be a primary table with one record foreach employee and the Company table will be the foreign key table, i.e. many company records for eachemployee. So we will call this table 1_Employee and the second table 2_Company as shown in Figure 6above. When you later save the table data to disk as .csv files, the table name will be used as the filenameso do not use characters that Windows cannot not recognise.

    Move to the next column (Field) and enter thename of the field which represents column A,i.e. F1 in this case. Note that you can just enterthe number if you want, the F prefix will beadded automatically for you.

    Move to the next column (Field Name) andenter the field name for this data that you areusing in the target database, Title in thisexample. Note that the name you enter heremust match exactly with the field name you are

    using in the database so that Access can copythe data from the .csv file to the correct fields.It is advisable to use only letters (and numbers)for field and table names, i.e. no spaces orother punctuation characters.

    Now move to the Field Type column (ignorethe Link Table Name and Group columns forthe moment). Choose the field type from thedrop down box, i.e. Text, Date/Time, Numeric,Currency and Yes/No. Note that Numeric andCurrency actually are the same and are used forany numeric value. All the fields in thisexample will be Text (apart from the keyfields). The PK Start No should be left blankand the Rpt (Repeat) field should be left as 0for the moment.

    Repeat the above for each column in thespreadsheet that you want to import. Note thatyou can use CONTROL + to repeat the

    contents of the previous field, which is usefulfor the Table Name fields.Figure 13. Spreadsheet data for Example 1.

    Page 16 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    17/29

    Excel to Access Converter Utility - User Manual

    Once you have entered all the column records you can click the Reset Sort button to get the records in thecorrect order.

    Creating a Relationship JoinNext you need to create a relationship between the tables, this can only be done with a separate LongInteger field and is generated automatically by the program. First add a new field to the Employee table,

    we will call it EmployeeID, but do not enter anything in the Field column. In the Field Type columnselect < Primary Key > in the drop down box, note that the PK Start No field changes to 1 which will

    be the number allocated to the first record, the subsequent records will be incremented by 1 each time. Ifthe actual number in this field is not important, I recommend changing it to a higher number, say 1000,

    because if you want to sort the converted records on the Exported Data tab for this field they will sortproperly. Remember that the data is stored as text in the export table even though the fields may bedefined as date or numbers, which means that records starting from 1 will be sorted as 1, 10, 11, 12, etcrather than 1, 2, 3, etc.

    When you have defined a Primary Key field for the Employee table you must now define a Foreign Keyfield for the Company table. To do this add another record for the Company table and enter a name forthe field, I usually use the same name as the corresponding field in the primary table but this is notnecessary. Note that the Field column should be left blank again. In the Link Table Name column enterthe name of the primary key table, 1_Employee in this case, and then select < Foreign Key > from thedrop down box in the Field Type column.

    Click the Reset Sort button again to sort the records in the correct order. Note that the key fields alwaysappear at the beginning of each table group.

    When the data is exported for this example, the relationship diagram will look like Figure 14 below(before the table names have been changed, that is).

    Figure 14. Relationship diagram for Example 1spreadsheet data.

    Note that this program only allows for one linkbetween tables and only using Long Integertype fields. However, you can easily change thefield types after the data has been imported, ifyou really need to.

    GroupingThe records in table Employees are repeated for each employee name in the spreadsheet but we onlyneed each employee name to appear once in the new table. To ensure that this happens the Group boxmust be ticked for each column that will be repeated, i.e. the Title, FirstName and LastName fields inthis example. What happens is that as each new record is added to the Employee table, the programchecks to see if there is already a record in the table which matches the fields that have been groupedand if there is, instead of adding another employee record with the same employee name, it just uses thePrimary Key field number of the existing record as the Foreign Key value in the Company table.

    For example, in the spreadsheet shown in Figure 13 above, the program will add a record for Mr MichaelSuyama with a PK number of 1000 (the start number for the Primary Key in this case) to the 1_Employee

    Page 17 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    18/29

    Excel to Access Converter Utility - User Manual

    table and a record for company Alfreds Futterkiste to the 2_Company table with foreign key numbervalue of 1000.

    It will then add a new record for Ms Janet Leverling with PK number 1001 (because there are no recordsalready matching those fields) to table 1_Employee and a new record for company Ana TrujilloEmparedados y helados with foreign key value of 1001.

    For the next record it will find that fields Title, FirstName and LastName already exist from a previousrecord so it does not add a new record to table 1_Employee this time but does add a new record to table2_Company for customer Antonio Moreno Taquera and sets the foreign key field to 1001 for thisrecord to maintain the link to the same primary key record.

    You can group up to four fields in this way, in the unlikely event that you have duplicated records thatcannot be matched on four separate fields you would need to add an extra column to the spreadsheet file togive a unique reference which could be used to identify grouped records.

    Example 2. Company Orders, (One to Many Relationship)This example is similar to the previous one in that it is a One to Many relationship except that there arethree tables required here. Figure 15 below shows a typical spreadsheet for this type of data.

    This spreadsheet represents an orders form where a new row has been added for each item of an order,columns A to D hold the details of the company placing the order, columns E and F hold the Order ID andOrder Date and columns G to J hold the details of the items being ordered. Rows 1 to 4 represent oneorder (they have the same company name and Order ID), rows 5 and 6 represent the second order and soon. So for this example, columns A-D need to be copied to a Companies table, columns E and F to anOrders table and columns G to J to an Order Details table (similar to the Access Northwind database).

    Table Companies would be linked to table Orders as a One to Many relationship and table Orderswill be linked to table Order Details, also as a One to Many relationship.

    Figure 15. Spreadsheet for the Company Orders Order Details file.

    The procedure to create the template for this data will be very similar to the previous example, create atable called, say, 1_Companies and map columns A, B, C and D in the spreadsheet to fields F1, F2, F3and F4 in the template as Text fields. Create a table called 2_Orders and map columns E and F to fields

    Page 18 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    19/29

    Excel to Access Converter Utility - User Manual

    F5 and F6 as Numeric and Date/Time fields. Create a third table called 3_OrderDetails and map theremaining columns to fields F7 to F10, these field types will be Text, Currency, Numeric and Numericrespectively.

    The relationship fields will also be similar to the previous example except that you will have a PrimaryKey field in tables 1_Companies and 2_Orders and Foreign Key fields in tables 2_Orders and

    3_OrderDetails.

    Note that, as the company names are unique in this example, it is only necessary to group on theCompanyName field. Likewise with the OrderID field as we need one orders record for each Order ID.

    Figure 16 below shows the completed template. Note that I have used different primary key start numbersfor the two tables in this example so that it easier to see and trace the relationships in the Exported Datatables, but it is not necessary in practice.

    Figure 16. Template definition for the Company Orders Order Details file.

    When this data is exported to a database the relationships diagram looks like Figure 17 shown here.

    Figure 17. Relationships diagram for theCompany Orders Order Detailsspreadsheet file. Note that theAutoNumber (ID) field is not reallynecessary in table 2_Orders as fieldOrderID is a primary key field anyway.

    Page 19 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    20/29

    Excel to Access Converter Utility - User Manual

    Example 3. Suppliers Products, (Many to Many Relationship)This example shows a list of suppliers and their products with one per row. Each product also has acategory which is repeated for every product. Figure 18 below shows part of the spreadsheet file.

    Columns A to C refer to the suppliers, columns D to F refer to the products for each supplier and columnsG and H show the category information for the products. It is clear that the data in the first three columns

    belong in a Suppliers table, the next three belong in a Products table and the last two belong in aCategories table. However, in this case, the Suppliers and Categories tables will both need to belinked to the Products table in a Many to Many relationship since each supplier can have many

    products and each category can apply to many products.

    Figure 18. Spreadsheet for the Suppliers Products Categories file.

    The procedure for creating a template is basically the same as the previous examples, create three tablescalled, say, 1_Suppliers, 2_Products and 3_Categories and map the spreadsheet columns to the fields inthose tables as before, Figure 19 below shows the completed template for this example.

    The difference here is that the tables 1_Suppliers and 3_Categories both have primary key fields which

    are linked to two foreign key fields in table 2_Products on the SupplierID and CategoryID fieldsrespectively. As before, I used different Primary Key Start numbers for the two tables but you dont needto do this if you dont want to.

    Since the Company and Category fields are unique for the two tables, you only need to tick the Groupcolumns for those two fields. In other words, if there had been two suppliers with exactly the sameCompany name you would, perhaps, need to also tick the Address fields Group column to ensure thatthe two suppliers with the same name appeared separately in the list.

    Note that in this example I used the prefix 3_ for the Categories table instead of 2_ (because the tablehas a primary key field and the Products table does not). The reason is that, again, it is easier to visualise

    the table structure in a Many to Many relationship if the junction table is between the other two. It isnot necessary, however, you can just use whatever naming conventions work for you. You will need toremember, however, that when you import the .csv files into any existing tables in the new database, that

    Page 20 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    21/29

    Excel to Access Converter Utility - User Manual

    you import the tables with the primary key fields first (i.e. the Suppliers and Categories tables in thisexample) or you will get an error if Referential Integrity is enforced on the links.

    Figure 19. Template definition for a Suppliers Products Categories file.

    When this data is exported to a database the relationships diagram looks like Figure 20 shown here.

    Figure 20. Many to ManyRelationships diagram for theSuppliers Products Categoriesspreadsheet file.

    Example 4. Company Products, (Repeated Columns)The previous examples have had the records stacked vertically, that is each row of the spreadsheetrepresents one (or more) records in the new database. This example show a spreadsheet file that stacks therecords horizontally, that is one (or more) columns will represent a separate record in the target database.

    Figure 21 below shows a typical example of a spreadsheet that has repeated columns for each item ofinformation. This file represents a list of companies (the company information is stored in columns A to

    C) together with the product information for the company. In this case there is just one row for eachcompany and the products for each company are stored in columns D to W. I have shaded the groups ofcolumns to make the data clearer, columns D to G show the Product Name, Category, Unit Price and

    Number in Stock for the first product, columns H to J show the same information for the second product,

    Page 21 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    22/29

    Excel to Access Converter Utility - User Manual

    and so on. The first company in the list (Exotic Liquids) has three products, the second company (NewOrleans Cajun Delights) has four products, and so on.

    It should be clear from this description that there are two tables required for this database, one for theCompanies (to store the information from the first three columns) and one for the products (to store theinformation from the remaining columns) as a One to Many relationship. However, the products

    information will need to have a record for each group of four columns while ignoring any columns thathave no information.

    Figure 21. Spreadsheet for Companies Products file, (columns have been squeezed up to get them in).

    The procedure to design the template for this type of spreadsheet is similar to the previous examples,create two tables and add the fields names for the company fields first, see Figure 22 below for an

    example of a completed template.

    Figure 22. Template definition for the Companies Products file.

    Page 22 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    23/29

    Excel to Access Converter Utility - User Manual

    In this case the products fields need to be repeated for each group of four fields, so columns D, E, F and Gwill use field names ProductName, Category, UnitPrice and InStock respectively and the Rpt columnshould be set to 1 for the four records to indicate that these four fields belong to the first record. Similarly,columns H, I, J and K will use the same field names (the Field Type columns must be the same as the

    previous four records) and the Rpt column will be set to 2 for this group to indicate they all belong to thesecond record for the same company. As shown above, repeat the sequence using the same field names

    (with the Rpt column number incrementing by 1 for each group of four columns) for as many groups ofrepeat records that are required. Make sure that any tables that do NOT have repeating fields, have theRpt column set to 0.

    The linking fields are set up in the same way as the earlier examples except that only one foreign key fieldis required for the Products table, the conversion code automatically provides a foreign key value foreach repeated record in the foreign key table.

    Since the CompanyName field happens to be unique in this example, it is not necessary to use the Groupfield here, if there were two companies with exactly the same name then you could use theCompanyName and Address fields (or whatever) to group the records in the Companies table as

    described above. You cannot use the Group tick box on repeated fields as that would make no sense. Alsoyou cannot add a Primary Key field to a repeated table (i.e. 2_Products in this example) although youcould, of course, add an AutoNumber field to the table after you have imported it into the new database.

    Figure 23 below shows the relationships diagram for the Companies - Products database.

    Figure 23. Relationships diagram for theCompanies - Products spreadsheet file.

    Partial Repeat FieldsThe repeat fields do not necessarily have to have the same number of columns in each group. Forexample, if there was, say, no InStockcolumn for the first product, then you can just omit that field fromthe template. As long as the Rpt column defines which group of fields belong to which record, the datawill convert correctly.

    For a more practical example, a recent MS Works database file had a list of members for a golf club withone name per row (plus titles, addresses, etc) and the remaining columns had the yearly subscriptionamount, the date paid and the method of payment for each year for the previous 7 years, except that theyonly started adding the payment method column for the last four years. So the first three years of data only

    had two columns per year while the last four years had three columns. In this case you would define afield for all three columns but omit any missing columns where necessary, Figure 24 below shows atypical example. Of course, the PaymentMethod fields will be filled with Nulls for the first three yearsrecords.

    Page 23 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    24/29

    Excel to Access Converter Utility - User Manual

    Figure 24. Exampletemplate for repeating

    fields where somecolumns are missing,field PaymentMethodin repeat groups 1, 2and 3 in this example.

    Of course, you are not limited to just two tables where records are repeated like this. Figure 25 belowshows a (cut down) insurance company database template with four tables, one for customers names, one

    for properties owned by the customers, one for claims made by customers on properties and one forpremiums paid each year which are repeated.

    Figure 25. Atemplate showinghow several tables,including a repeatingone, can be combined

    into a single databasefile.

    In this case the table 1_Customers is linked to 2_Properties because a customer can own one or moreproperties, the 2_Properties table is linked to 3_Claims and 4_Payments because a customer can claimon an insurance policy for a property and he also makes yearly insurance premium payments for each

    property. The relationship diagram would look something like Figure 26 below.

    Figure 26. Relationships diagram for anInsurances Policies data spreadsheet file.

    Page 24 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    25/29

    Excel to Access Converter Utility - User Manual

    Adding Blank Dummy FieldsYou can also add dummy fields to the template definition. For example, suppose you want to add a field toa table which does NOT have a corresponding column in the spreadsheet file. Just add the field to thetable list as normal but leave the Field column blank in the template. When you convert the imported datathe field will be included in the table but, of course, there will be no data in the field.

    If you have already created the tables in the target database (and you have added a field which does notappear in the spreadsheet file) then there would be no point in doing this since Access will just ignore anyfields which are not in the .csv file that is being imported. However, if you are allowing Access to createthe tables for you when you import the .csv files then adding an unused field to the template definitionwill allow it to be added to the tables along with all the other fields for the table.

    Adding Filled Dummy FieldsYou can also add a dummy field and fill it with data. Add the field to the template list and leave the Fieldcolumn blank. If you now enter some text in the PK Start No field, that text will be entered into the fieldfor every record in that table. You should make sure that the data you enter here matches the field type

    that you have selected for the field.

    However, you need to be careful with this option, if you add a filled field to a table which does notnormally have a record for every record in the database, the conversion code will create a record for everyrecord. For example, in the Insurance Policies template shown above, only 20 of the policy records hadcorresponding insurance claims in the Claims table, so there are only 20 records created in table3_Claims. If a dummy field had been added to the Claims table, say ClaimPaid (or whatever) and sometext entered in the PK Start No field, there would then be several hundred records in table 2_Claims

    because every Claims record is not blank.

    Actually, it is easy enough to enter data into a field on all records after the tables have been created in the

    new database by using an Update query, so this option is not really that essential.

    Section 7. ConclusionThis program has been tried with a few spreadsheet files that I have had to convert as an Accessdeveloper. There are probably many other ways of saving data in spreadsheets (and other types ofdatabases or even Word processor files) that I have not come across. You may need to experiment a bitwith your data and the template definitions to see if this utility can convert it satisfactorily.

    If you find any bugs in the program or errors in this document please contact me at :-

    [email protected]

    Peter Hibbs.

    AcknowledgementsThanks to Tom Wickerath for providing some neat code to convert Excel column letters to Access fieldnumbers.

    HistoryVersion 1.0 9 October 2007

    First version.

    Page 25 of 29

    mailto:[email protected]:[email protected]
  • 7/29/2019 Excel to Access Converter Utility Manual

    26/29

    Excel to Access Converter Utility - User Manual

    Appendix AThis chart can be used to plan out your template records on paper before you enter the data into the

    program. Just print out as many pages as you need depending on the number of columns in yourspreadsheet file.

    Template Layout for Project --

    Column Field ID Table Name Field Name Group Field Type Rpt Notes

    A F1

    B F2

    C F3

    D F4

    E F5

    F F6

    G F7

    H F8

    I F9J F10

    K F11

    L F12

    M F13

    N F14

    O F15

    P F16

    Q F17

    R F18

    S F19

    T F20

    U F21

    V F22

    W F23

    X F24

    Y F25

    Z F26

    AA F27

    AB F28

    AC F29

    AD F30

    AE F31

    AF F32

    AG F33

    AH F34AI F35

    AJ F36

    AK F37

    AL F38

    AM F39

    AN F40

    AO F41

    AP F42

    AQ F43

    AR F44

    AS F45

    AT F46AU F47

    AV F48

    AW F49

    AX F50

    Page 26 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    27/29

    Excel to Access Converter Utility - User Manual

    Template Layout for Project --

    Column Field ID Table Name Field Name Group Field Type Rpt Notes

    AY F51

    AZ F52BA F53

    BB F54

    BC F55

    BD F56

    BE F57

    BF F58

    BG F59

    BH F60

    BI F61

    BJ F62

    BK F63

    BL F64BM F65

    BN F66

    BO F67

    BP F68

    BQ F69

    BR F70

    BS F71

    BT F72

    BU F73

    BV F74

    BW F75

    BX F76

    BY F77BZ F78

    CA F79

    CB F80

    CC F81

    CD F82

    CE F83

    CF F84

    CG F85

    CH F86

    CI F87

    CJ F88

    CK F89CL F90

    CM F91

    CN F92

    CO F93

    CP F94

    CQ F95

    CR F96

    CS F97

    CT F98

    CU F99

    CV F100

    Page 27 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    28/29

    Excel to Access Converter Utility - User Manual

    Template Layout for Project --

    Column Field ID Table Name Field Name Group Field Type Rpt Notes

    CW F101

    CX F102

    CY F103

    CZ F104DA F105

    DB F106

    DC F107

    DD F108

    DE F109

    DF F110

    DG F111

    DH F112

    DI F113

    DJ F114

    DK F115

    DL F116

    DM F117

    DN F118

    DO F119

    DP F120

    DQ F121

    DR F122

    DS F123

    DT F124

    DU F125

    DV F126

    DW F127

    DX F128

    DY F129DZ F130

    EA F131

    EB F132

    EC F133

    ED F134

    EE F135

    EF F136

    EG F137

    EH F138

    EI F139

    EJ F140

    EK F141EL F142

    EM F143

    EN F144

    EO F145

    EP F146

    EQ F147

    ER F148

    ES F149

    ET F150

    Page 28 of 29

  • 7/29/2019 Excel to Access Converter Utility Manual

    29/29

    Excel to Access Converter Utility - User Manual

    Template Layout for Project --

    Column Field ID Table Name Field Name Group Field Type Rpt Notes

    EU F151

    EV F152

    EW F153

    EX F154EY F155

    EZ F156

    FA F157

    FB F158

    FC F159

    FD F160

    FE F161

    FF F162

    FG F163

    FH F164

    FI F165

    FJ F166

    FK F167

    FL F168

    FM F169

    FN F170

    FO F171

    FP F172

    FQ F173

    FR F174

    FS F175

    FT F176

    FU F177

    FV F178

    FW F179FX F180

    FY F181

    FZ F182

    GA F183

    GB F184

    GC F185

    GD F186

    GE F187

    GF F188

    GG F189

    GH F190

    GI F191GJ F192

    GK F193

    GL F194

    GM F195

    GN F196

    GO F197

    GP F198

    GQ F199

    GR F200