{"revision":"c10276e953456835cdbb1f3a60d58ae1980be353","document":{"id":795,"path":"api-reference/server-api-reference/GlideExcelParserScopedAPI.md","title":"GlideExcelParser - Scoped, Global","bundle":null,"doc_type":null,"release":"australia","body":"\n# GlideExcelParser - Scoped, Global\n\nThe GlideExcelParser API parses .xlsx formatted Excel files and access file data in scripts.\n\nYou can use the GlideExcelParser methods in global and scoped scripts. Use the `sn_impex` namespace identifier to create a GlideExcelParser object.\n\n**Parent Topic:**[Server API reference](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/api-server.md)\n\n## GlideExcelParser - GlideExcelParser\\(\\)\n\nCreates an instance of GlideExcelParser.\n\nThe API name space identifier \"sn\\_impex\" must be used when creating a GlideExcelParser object.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n```\nvar parser = new sn_impex.GlideExcelParser(); \nvar attachment = new GlideSysAttachment();\n// use attachment sys id of an excel file\nvar attachmentStream = attachment.getContentStream(<attachment sys id>);\n\nparser.parse(attachmentStream); \n\n//retrieve the column headers\nvar headers = parser.getColumnHeaders();  \nvar header1 = headers[0]; \nvar header2 = headers[1]; \n\n//print headers\ngs.info(header1 + \" \" + header2); \n\nwhile(parser.next()) { \n  var row = parser.getRow(); \n  //print row value for both columns   \n  gs.info(row[header1] + ' ' + row[header2]) \n}\n```\n\n## GlideExcelParser - close\\(\\)\n\nClose the connection to the input stream and release the document.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|void| |\n\nThis example shows how to close the parser once all document management is complete.\n\n```\n// iterate over each row in the excel sheet\nvar attachment = new GlideSysAttachment();\nvar attachmentStream = attachment.getContentStream(<attachment sys id>);\nvar parser = new sn_impex.GlideExcelParser();\nparser.parse(attachmentStream);\nwhile (parser.next()) {\n  // do something on each row\n  var row = parser.getRow();\n  gs.info(JSON.stringify(row));\n}\nparser.close(); // close the stream and release the document\n```\n\n## GlideExcelParser - getColumnHeaders\\(\\)\n\nReturns a list of column headers from the parsed document.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|Array|An array of strings of column headers from the parsed document.|\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - getErrorMessage\\(\\)\n\nReturns the error message when the parse\\(\\) method fails.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|String|The error message.|\n\n## GlideExcelParser - getRow\\(\\)\n\nGet the current row values and headers.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|Object|The row headers are property names and the row values are property values.|\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - getSheetNames\\(\\)\n\nGets a list of all worksheet names in an Excel workbook.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|Array|Array of strings as worksheet names ordered as positioned from left to right in the workbook. Results include any worksheets marked as hidden.|\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - getTableInfo\\(\\)\n\nGets table column types and max character length from a spreadsheet or CSV attachment.\n\n**Note:** This method is restricted to scoped applications.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|Object|Returns attachment data as a map in which the key is column name. Values contain column type and maximum length of a character string in the column. Access return values using the getType\\(\\) and getLength\\(\\) methods.|\n\nThis example shows how to data from a 7-column spreadsheet attachment including row data such as 1, Meghan, 1/1/85, 1:00 AM, 10.00%, 224-432-8582, ½.\n\n```\nvar attachmentSysId = \"<sys_id>\";\nvar headerRowNumber = 6;\n\nvar attachmentStream = new GlideSysAttachment().getContentStream(attachmentSysId);\nvar parser = new sn_impex.GlideExcelParser();\nparser.setHeaderRowNumber(headerRowNumber);\nif (!parser.parse(attachmentStream)) {\n    throw \"Attachment could not be parsed as an Excel Spreadsheet \" + attachmentSysId;\n}\nvar tableInfo = parser.getTableInfo();\nfor (var name in tableInfo) {\ngs.info('Column Name : ' + name + ', Type : ' + tableInfo[name].getType() + ', Max Length : ' + tableInfo[name].getLength());\n}\n```\n\nOutput:\n\n```\nProgressWorker: Attempted to get non-existent sys_progress_\nworker record, inserted 81b0ca5ddb59730090c9ff9dbf9619c4\nsn_appcreator: Column Name : My Number Col, Type : integer,\n Max Length : 1\nsn_appcreator: Column Name : My String Col, Type : string, \n Max Length : 650\nsn_appcreator: Column Name : My Date Col, Type : glide_date,\n Max Length : 6\nsn_appcreator: Column Name : My DateTime Col, Type : \n glide_date_time, Max Length : 7\nsn_appcreator: Column Name : My Percent Col, Type : decimal,\n Max Length : 6\nsn_appcreator: Column Name : My Phone Col, Type : string, \n Max Length : 12\nsn_appcreator: Column Name : My Fraction Col, Type : decimal,\n Max Length : 3\n```\n\n## GlideExcelParser - next\\(\\)\n\nMoves to the next row.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| | |\n\n|Type|Description|\n|----|-----------|\n|Boolean|Returns true if there is a next row, otherwise, returns false.|\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - parse\\(InputStream inputStream\\)\n\nParses an XLSX-formatted Excel document.\n\n<table id=\"table_u2j_lch_4z\" class=\"parameters\"><thead><tr><th>\n\nName\n\n</th><th>\n\nType\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\ninputStream\n\n</td><td>\n\n[GlideScriptableInputStream](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/c_GlideScriptableInpStrmScopedAPI.md)\n\n</td><td>\n\nExcel document provided as an input stream. **Note:** Do not set this value if using the [setSource\\(\\)](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/GlideExcelParserScopedAPI.md) method to parse the same source multiple times.\n\n</td></tr></tbody>\n</table><table id=\"table_v2j_lch_4z\" class=\"returns\"><thead><tr><th>\n\nType\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\nBoolean\n\n</td><td>\n\nFlag that indicates if the parse was successful.Valid values:\n\n-   true: Document was successful parsed.\n-   false: Document was not successfully parsed.\n\n</td></tr></tbody>\n</table>Example from a scripted REST API script where the Excel file is sent using an input stream in the request payload.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\nparser.parse(request.body.dataStream); \n```\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - setHeaderRowNumber\\(Number headerRowNumber\\)\n\nSet the number of the header row to be retrieved.\n\n|Name|Type|Description|\n|----|----|-----------|\n|headerRowNumber|Number|The header row to be retrieved.|\n\n|Type|Description|\n|----|-----------|\n|void| |\n\n## GlideExcelParser - setNullToEmpty\\(Boolean empty\\)\n\nReturn an empty value instead of null when an Excel cell is not present.\n\n|Name|Type|Description|\n|----|----|-----------|\n|empty|Boolean|When true, cells that are not present return an empty value. When false, cells that are not present return null.|\n\n|Type|Description|\n|----|-----------|\n|void| |\n\n## GlideExcelParser - setSheetName\\(String sheetName\\)\n\nSet the name of the sheet to be retrieved.\n\nIf both setSheetNumber\\(\\) and setSheetName\\(\\) are set, setSheetName\\(\\) is used.\n\n|Name|Type|Description|\n|----|----|-----------|\n|sheetName|String|The name of the sheet to be retrieved.|\n\n|Type|Description|\n|----|-----------|\n|void| |\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n## GlideExcelParser - setSheetNumber\\(Number sheetNumber\\)\n\nSet the number of the Excel sheet to be retrieved.\n\nIf both setSheetNumber\\(\\) and setSheetName\\(\\) are set, setSheetNumber\\(\\) is ignored.\n\n|Name|Type|Description|\n|----|----|-----------|\n|sheetNumber|Number|The Excel sheet number to retrieve.|\n\n|Type|Description|\n|----|-----------|\n|void| |\n\nThe following example shows how to use this method to specify the sheet number of an attached spreadsheet workbook to be read.\n\n```\nvar parser = new sn_impex.GlideExcelParser(); \nvar attachment = new GlideSysAttachment();\n\n// Use the sys id of an Excel file in the sys_attachment table and copy the sys_id of attachment.\nvar attachmentStream = attachment.getContentStream('178e0511138b6300026e32228144b04e');\n\n// Specify the sheet Number to be read, 0 denotes sheet 1, 1 denotes sheet 2, etc.\nparser.setSheetNumber(\"0\");   \n\nparser.parse(attachmentStream);\n\n// retrieve the column headers (tests if on the correct sheet)\nvar headers = parser.getColumnHeaders();\nvar header1 = headers[0];\nvar header2 = headers[1];\nvar header3 = headers[2];\n\n// print headers\ngs.info('Header 1 value = ' +header1);\ngs.info('Header 2 value = ' +header2);\ngs.info('Header 3 value = ' +header3);\n```\n\nOutput:\n\n```\nHeader 1 value = sys_id\nHeader 2 value = email\nHeader 3 value = undefined\n```\n\n## GlideExcelParser - setSource\\(InputStream inputStream\\)\n\nDefines an input source for parsing multiple times or parsing each worksheet in an Excel file.\n\n|Name|Type|Description|\n|----|----|-----------|\n|inputStream|[GlideScriptableInputStream](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/c_GlideScriptableInpStrmScopedAPI.md)|Excel document provided as an input stream.|\n\n|Type|Description|\n|----|-----------|\n|None| |\n\nThe following example shows how to parse an Excel file attachment multiple times to retrieve column headers and print values of each row for each worksheet. Results display column headers and values of three separate sheets in the Excel attachment.\n\n```\nvar parser = new sn_impex.GlideExcelParser();\n\nvar attachment = new GlideSysAttachment();\n\n// Use the attachment sys_id of an Excel file\nvar attachmentStream = attachment.getContentStream(\"<attachment_sys_id>\");\n\n// Set the source to be parsed\nparser.setSource(attachmentStream);\n\n// Get the worksheet names to be parsed in the Excel document\nvar list_sheet_name = parser.getSheetNames();\n\ngs.info(\" Sheet Names \" + list_sheet_name.join(\", \"));\n\n// Iterate over each worksheet in the Excel workbook\nfor (var i = 0; i < list_sheet_name.length; i++) {\n    gs.info(\"**************************************************************************************\");\n    gs.info(\"Sheet name:    \" + list_sheet_name[i]);\n\n// Set the worksheet name to be parsed\n    parser.setSheetName(list_sheet_name[i]);\n\n// Parse each worksheet set using setSheetName()\n    if (parser.parse()) {\n        //retrieve the column headers\n        var headers = parser.getColumnHeaders();\n        var header1 = headers[0];\n        var header2 = headers[1];\n        var header3 = headers[2];\n\n        //print headers\n        gs.info(header1 + \"\\t||\" + header2 + \"\\t||\" + header3);\n\n        // Iterate over each row in the worksheet\n        while (parser.next()) {\n            var row = parser.getRow();\n            //print row value for both columns   \n            gs.info(row[header1] + '\\t|| ' + row[header2] + '\\t||' + row[header3])\n        }\n    } else\n        gs.info(parser.getErrorMessage());\n}\n```\n\nOutput:\n\n```\n*** Script:  Sheet Names Incident Table, sys_user Table, knowledge Table\n*** Script: **************************************************************************************\n*** Script: Sheet name:    Incident Table\n*** Script: Number\t||Opened\t||Short description\n*** Script: INC0010112\t|| 2019-07-29 11:48:43\t||Assessment :  ATF Assessor\n*** Script: INC0010111\t|| 2019-07-22 14:04:57\t||ATF : Test1\n*** Script: INC0009009\t|| 2018-08-30 01:06:16\t||Unable to access the shared folder.\n*** Script: **************************************************************************************\n*** Script: Sheet name:    sys_user Table\n*** Script: User ID\t||Name\t||Email\n*** Script: abel.tuter\t|| Abel Tuter\t||abel.tuter@example.com\n*** Script: abraham.lincoln\t|| Abraham Lincoln\t||abraham.lincoln@example.com\n*** Script: adela.cervantsz\t|| Adela Cervantsz\t||adela.cervantsz@example.com\n*** Script: aileen.mottern\t|| Aileen Mottern\t||aileen.mottern@example.com\n*** Script: alejandra.prenatt\t|| Alejandra Prenatt\t||alejandra.prenatt@example.com\n*** Script: **************************************************************************************\n*** Script: Sheet name:    knowledge Table\n*** Script: Number\t||Short description\t||Author\n*** Script: KB99999999\t|| Microsoft Outlook Issues\t||System Administrator\n*** Script: KB0000033\t|| Eclipse configuration for Android development\t||System Administrator\n*** Script: KB0000032\t|| Getting Around in Windows\t||System Administrator\n*** Script: KB0000031\t|| How can I find the MAC address of my Ethernet or\n   wireless interface?\t||Sam Sorokin\n```\n\n"}}