# Read and Write Data from a Downloaded XLSX File

Attaching the script along with the Screenshot to follow the steps

We need 3 different Service suite scripts

- A common JS script
- Filename JS: Where we are providing the Sheet name, Path of the repository where the file is being saved
- Write JS: Here as well, we need to define the repository name and file path after making the write action, We also need to add the controller URL and AIQ username  
    and Password
 
### Test Script

 ![](https://docs.appvance.net/uploads/images/gallery/2026-07/scaled-1680-/11B8cOUcXbP6ElHp-f7050ee28e24.png)Sample Script: [WriteExcel.ds](../../Resources/Scripts/WriteExcel/WriteExcel.ds)

- Testfile name: At step number 45, make sure to add the repository path and the repository name which the user cloned in the AIQ
- After clicking on download, add a step store in locker and provide the sheet name, which is there in the download file
- 
 
- In Ds script at step 55 and 61, make sure to give the exact header name for the targetted column header
 
### Write JS

Write JS: Here as well, we need to define the repository name and file path after making the write action, We also need to add the controller URL and AIQ username  
and Password

<div class="codeSnippet" id="bkmrk-copy-1-2-3-4-5-6-7-8">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="True" style="mc-code-lang: JavaScript;">```
<span aria-hidden="true" class="codeSnippetLineNumbers" style="border-right: #AAA 2px solid;">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</span>```
<span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">writeexcel</span>(row, col, value)<br></br>{<br></br><span style="color: #333333; font-weight: bold; ">var</span> $excel= readExcel(filepathval);<br></br><span style="color: #333333; font-weight: bold; ">var</span> $sheetname = locker.get(<span style="color: #dd1144; ">"sheet"</span>);<br></br>log($sheetname);<br></br><span style="color: #999988; font-style: italic; ">//var $sheetname="Sheet1";</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $sheet = $excel.getWorkbook().getSheet($sheetname); <span style="color: #999988; font-style: italic; ">// Get sheet as an object HSSFSheet</span><br></br>  $excel.getWorkbook().setActiveSheet($excel.getWorkbook().getSheetIndex($sheetname));<span style="color: #999988; font-style: italic; ">//Change active sheet to the one specified</span><br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $headers = $sheet.getRow(<span style="color: #008080; ">0</span>);<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $lastExistingColumn = $headers.getLastCellNum(); <span style="color: #999988; font-style: italic; ">// Get number of colum</span><br></br>  locker.put(<span style="color: #dd1144; ">"columnlength"</span>,$lastExistingColumn);<br></br>        log($excel);<br></br>        $excel.setValueAt(row, col, value);<br></br>        writeExcel($excel,  filepathval);<br></br>}<br></br><span style="color: #333333; font-weight: bold; ">var</span> filepathval=locker.get(<span style="color: #dd1144; ">"filenameval"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> rowval=locker.get(<span style="color: #dd1144; ">"rownum"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> colval=locker.get(<span style="color: #dd1144; ">"colnum"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> actualval=locker.get(<span style="color: #dd1144; ">"excelval"</span>);<br></br><br></br>log(<span style="color: #dd1144; ">"servicesuite "</span>+filepathval);<br></br>writeexcel(rowval,colval,actualval);<br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> $boundary = <span style="color: #dd1144; ">"--AIQ-DS-BOUNDARY"</span>;<br></br><span style="color: #333333; font-weight: bold; ">var</span> $repositoryName = <span style="color: #dd1144; ">"Appvance"</span>; <span style="color: #999988; font-style: italic; ">// CHANGE FOR YOUR REPO NAME, THIS CONF MUST BE IN THE USER ACCOUNT USED TO LOGIN</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $CONTROLLER = <span style="color: #dd1144; ">"http://localhost:8080"</span>; <span style="color: #999988; font-style: italic; ">// Controller URL</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $username = <span style="color: #dd1144; ">"appvance"</span>; <span style="color: #999988; font-style: italic; ">// username used to login to aiq</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $password = <span style="color: #dd1144; ">"appvance"</span>; <span style="color: #999988; font-style: italic; ">// password used to login to aiq</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> $uploadPath = <span style="color: #dd1144; ">"Customer/VWR/ReadWriteXLS/"</span>; <span style="color: #999988; font-style: italic; ">// CHANGE FOR folder in repo where the modified file should be uploaded</span><br></br>include(<span style="color: #dd1144; ">"{ds}/commonFunctions.js"</span>);<br></br><br></br><span style="color: #333333; font-weight: bold; ">if</span> (login($CONTROLLER)) {<br></br>    uploadFile(fileName, fileName);<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> $resp= get($CONTROLLER+<span style="color: #dd1144; ">"/AppvanceServer/rest/admin/logout"</span>);<br></br>    log(<span style="color: #dd1144; ">"logout: "</span>+$resp.getDataString());<br></br>};
```
```

 </div> </div>Write JS. At step 26 and 30, make sure to add the repository name and the repository path, respectively, which the user cloned in the AIQ

###  

### Filename JS

Filename JS:

<div class="codeSnippet" id="bkmrk-copy-1-2-3-4-5-6-7-8-1">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="True" style="mc-code-lang: JavaScript;">```
<span aria-hidden="true" class="codeSnippetLineNumbers" style="border-right: #AAA 2px solid;">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
</span>```
<span style="color: #333333; font-weight: bold; ">function</span> <span style="color: #990000; font-weight: bold; ">columnlen</span>(filepathvalcol)<br></br>{<br></br>  <span style="color: #999988; font-style: italic; ">//var filepathvalcol=locker.get("filenameval");</span><br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $sheetname = locker.get(<span style="color: #dd1144; ">"sheet"</span>);<br></br>  log($sheetname);<br></br>  log(<span style="color: #dd1144; ">"reading excel from "</span>+filepathvalcol);<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $excel= readExcel(filepathvalcol);<br></br>  <span style="color: #999988; font-style: italic; ">//var $sheetname="Sheet1";</span><br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $sheet = $excel.getWorkbook().getSheet($sheetname); <span style="color: #999988; font-style: italic; ">// Get sheet as an object HSSFSheet</span><br></br>  $excel.getWorkbook().setActiveSheet($excel.getWorkbook().getSheetIndex($sheetname));<span style="color: #999988; font-style: italic; ">//Change active sheet to the one specified</span><br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $headers = $sheet.getRow(<span style="color: #008080; ">0</span>);<br></br>  <br></br>  <span style="color: #333333; font-weight: bold; ">var</span> $lastExistingColumn = $headers.getLastCellNum(); <span style="color: #999988; font-style: italic; ">// Get number of colum</span><br></br>  locker.put(<span style="color: #dd1144; ">"columnlength"</span>,$lastExistingColumn);<br></br>  <span style="color: #333333; font-weight: bold; ">var</span> headersArray = []<br></br>  <span style="color: #333333; font-weight: bold; ">for</span> (<span style="color: #333333; font-weight: bold; ">var</span> col = <span style="color: #008080; ">0</span>; col < $lastExistingColumn; col++) {<br></br>    <span style="color: #333333; font-weight: bold; ">var</span> cell = $headers.getCell(col);<br></br>     <span style="color: #333333; font-weight: bold; ">switch</span> (cell.getCellType().toString()) {<br></br>        <span style="color: #333333; font-weight: bold; ">case</span> <span style="color: #dd1144; ">"STRING"</span>:<br></br>           headersArray.push(cell.getStringCellValue());<br></br>           <span style="color: #333333; font-weight: bold; ">break</span>;<br></br>        <span style="color: #333333; font-weight: bold; ">case</span> <span style="color: #dd1144; ">"NUMERIC"</span>:<br></br>           headersArray.push(cell.getNumericCellValue());<br></br>           <span style="color: #333333; font-weight: bold; ">break</span>;<br></br>        <span style="color: #333333; font-weight: bold; ">default</span>:<br></br>           headersArray.push(cell.toString());<br></br>           <span style="color: #333333; font-weight: bold; ">break</span>;<br></br>     } <br></br>  }<br></br>  locker.put(<span style="color: #dd1144; ">"headers"</span>, headersArray);<br></br>}<br></br><br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> json = locker.get(<span style="color: #dd1144; ">"fileDownloadedList"</span>);<br></br><br></br><span style="color: #999988; font-style: italic; ">// [{"path":"C:\Users\Administrator\TestDesigner\NetworkProxy\execution\Chrome10383680D\EnrollmentSearch_2024022217255349.xls","name":"EnrollmentSearch_2024022217255349.xls","length":4702}]</span> <br></br><br></br><span style="color: #333333; font-weight: bold; ">var</span> filePath = <span style="color: #dd1144; ">""</span>+json.getJSONObject(<span style="color: #008080; ">0</span>).getString(<span style="color: #dd1144; ">"path"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> fileName1 = <span style="color: #dd1144; ">""</span>+json.getJSONObject(<span style="color: #008080; ">0</span>).getString(<span style="color: #dd1144; ">"name"</span>);<br></br><span style="color: #333333; font-weight: bold; ">var</span> fileName = fileName1.replace(/\s+/g, <span style="color: #dd1144; ">'_'</span>)<br></br>locker.put(<span style="color: #dd1144; ">"repofilename"</span>,fileName);<br></br>locker.put(<span style="color: #dd1144; ">"filenameval"</span>,fileName);<br></br>filePath = filePath.replace(/\\/g,<span style="color: #dd1144; ">"/"</span>);<br></br><span style="color: #999988; font-style: italic; ">// path to your repo</span><br></br><span style="color: #333333; font-weight: bold; ">var</span> pathToYourRepo = <span style="color: #dd1144; ">"REPOSITORY/Appvance/Customer/VWR/ReadWriteXLS/"</span> + fileName; <span style="color: #999988; font-style: italic; ">// Give the path pointing to the folder that has the script</span><br></br>log(<span style="color: #dd1144; ">"servicefilename val "</span>+pathToYourRepo);<br></br>locker.put(<span style="color: #dd1144; ">"pathToYourRepoval"</span>,pathToYourRepo);<br></br>log(<span style="color: #dd1144; ">"file saved at: "</span> + pathToYourRepo);<br></br><span style="color: #333333; font-weight: bold; ">var</span> fileContentAsBytes = java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(filePath));<br></br><br></br>writeBytes(fileName, fileContentAsBytes);<br></br><br></br>log(<span style="color: #dd1144; ">" | downloaded file size: "</span>+fileContentAsBytes.length);<br></br><br></br>columnlen(fileName);
```
```

 </div> </div>##  HEADING

<div class="codeSnippet" id="bkmrk-copy-1-2-3-4-5-6-7-8-2">[Copy](javascript:void(0);)<div class="codeSnippetBody" data-mc-continue="False" data-mc-line-number-start="1" data-mc-use-line-numbers="True">```
<span aria-hidden="true" class="codeSnippetLineNumbers" style="border-right: #AAA 2px solid;">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
</span>```
function uploadFile(fileName, filePath) {<br></br>        var data = createMultipartPayload(fileName, filePath);<br></br>    var call = createPost($CONTROLLER + "/AppvanceServer/rest/file/uploadFile?&commitMessage=Appvance+skip+commit&path=REPOSITORY/" + $repositoryName + "/" + $uploadPath + fileName, data, "multipart/form-data", " boundary=" + $boundary);<br></br>    var resp = process(call);<br></br>    log(resp.getDataString())<br></br>}<br></br><br></br><br></br>function getSessionCookie() {<br></br>    var $jsession = getCookieValue($CONTROLLER, "JSESSIONID");<br></br>    var cookie = "JSESSION=" + $jsession;<br></br>    locker.put("aiq-cookie", cookie);<br></br>    addGlobalHeader("cookie", "JSESSION=" + $jsession);<br></br>}<br></br><br></br>function login() {<br></br>    var $loginForm = formData();<br></br>    $loginForm.put("username", $username);<br></br>    $loginForm.put("password", $password);<br></br>    var $resp = get($CONTROLLER+"/AppvanceServer/rest/admin/isLogged");<br></br>    if ($resp.getDataString().indexOf("false")) {<br></br>        var $call = createPost($CONTROLLER + "/AppvanceServer/rest/admin/logginForServices", $loginForm);<br></br>        var $resp = process($call).getDataString();<br></br>        if ($resp.indexOf("true") != -1) {<br></br>            getSessionCookie();<br></br>            log("Login successful");<br></br>            return true;<br></br>        } else {<br></br>            log("Login was NOT successful: " + $resp)<br></br>            return false;<br></br>        }<br></br>    } else {<br></br>        getSessionCookie();<br></br>    }<br></br>    <br></br>}<br></br><br></br>function createMultipartPayload(filename, path) {<br></br>    var header = '--' + $boundary + '\n' +<br></br>        'Content-Disposition: form-data; name="file"; filename="' + filename + '"\r\n' +<br></br>        'Content-Type: application/octet-stream\r\n\r\n';<br></br>    var headerBytes = new Array(header.length);<br></br>    for (var i = 0; i < header.length; ++i) {<br></br>        headerBytes[i] = header.charCodeAt(i);<br></br>    }<br></br>    var $data = readBytes(path);<br></br>    var footer = '\r\n--' + $boundary + "--\r\n";<br></br>    var footerBytes = new Array(footer.length);<br></br>    for (var i = 0; i < footer.length; ++i) {<br></br>        footerBytes[i] = footer.charCodeAt(i);<br></br>    }<br></br>    return headerBytes.concat($data).concat(footerBytes);<br></br>}<br></br><br></br>function getLastDownloadedFile(json) {<br></br>    json.sort((a, b) => b.modifiedTime - a.modifiedTime);<br></br>    return json[0];<br></br>}
```
```

 </div> </div><div id="bkmrk-last-updated%3A-decemb">---

Last updated: <span class="mc-variable General.NewDateTimeVariable variable">December 20, 2024</span>

If you have any feedback on this topic, please contact us at <documentation@appvance.ai>

</div>