How to resolve MALFORMED error with ExcelKeywords?

The Error:
Reason:
java.lang.IllegalArgumentException: MALFORMED
at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.getNextEntry(ZipSecureFile.java:280)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.(ZipInputStreamZipEntrySource.java:52)
at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:100)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:295)
at com.kms.katalon.keyword.excel.ExcelKeywords.getWorkbook(ExcelKeywords.groovy:115)
at com.kms.katalon.keyword.excel.ExcelKeywords$getWorkbook.call(Unknown Source)
at Save Estimate - Upload CSV File.run(Save Estimate - Upload CSV File:61)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:144)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:135)
at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
at TempTestCase1692816099551.run(TempTestCase1692816099551.groovy:25)

This error just began being thrown as of Monday 8/21/2023 it never happened before.

What I have tried:
I have added the ExcelKeywords.jar and ExcelKeywords-sources.jar sources to Project > Settings > Library Management > External Libraries but it keeps throwing the same MALFORMED error and I dont know why. THis happens on my Windows 10 machine and my colleagues machine but on a Windows 10 virtual remote desktop it runs the exact same code and no error.

Katalon Support Team also could not replicate the issue on Mac or Windows machines.

Myself and my team are blocked and do not know how to proceed.

Any and all help greatly appreciated.

My code:
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import static com.kms.katalon.core.testobject.ObjectRepository.findWindowsObject
import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.testcase.TestCase as TestCase
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.testng.keyword.TestNGBuiltinKeywords as TestNGKW
import com.kms.katalon.core.testobject.TestObject as TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import com.kms.katalon.core.windows.keyword.WindowsBuiltinKeywords as Windows
import internal.GlobalVariable as GlobalVariable
import org.openqa.selenium.Keys as Keys
import java.text.SimpleDateFormat as SimpleDateFormat
import org.codehaus.groovy.scriptom.ActiveXObject as ActiveXObject
import java.io.File as File
import java.io.IOException as IOException
import com.kms.katalon.keyword.excel.ExcelKeywords as ExcelKeywords
import java.util.Random as Random
import org.apache.poi.ss.usermodel.*
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.FileInputStream
import java.io.FileOutputStream

def generateRandomNumber() {
Random random = new Random()

int randomNumber = random.nextInt(90000000) + 10000000

return randomNumber

}

def eightDigitAcctNumber = generateRandomNumber()

def accountNumber = eightDigitAcctNumber

println('Generated Account Number Is ’ + accountNumber)
String accountId = accountNumber.toString()

GlobalVariable.AccountId = accountId

println('Generated Account Number Is Set To AccountId as : ’ + accountId)

println('AccountId is Set As GlobalVariable.AccountId as : ’ + GlobalVariable.AccountId)

String excelFilePath = ‘C:/Temp/Katalon_Data_Files/Supernova Test CSV file_Chris_Birthday_Account_Number.xlsx’

String sheetName = ‘Sheet1’

String textToWrite = GlobalVariable.AccountId.toString()

println('Value of string 'textToWrite is : ’ + textToWrite)

workbook01 = ExcelKeywords.getWorkbook(excelFilePath)

sheet01 = ExcelKeywords.getExcelSheet(workbook01, sheetName)

for (int rowIndex = 1; rowIndex < 8; rowIndex++) {
println('rowIndex Number is: ’ + rowIndex)

println('workbook01 value is: ' + workbook01)

println('sheet01 value is: ' + sheet01)

ExcelKeywords.setValueToCellByIndex(sheet01, rowIndex, 0, textToWrite)

println('BEGIN UPDATE EXCEL SPREADSHEET WITH GLOBAL VARIABLE ACCOUNT ID for CELL Number: ' + rowIndex)

}

ExcelKeywords.saveWorkbook(excelFilePath, workbook01)

1 Like

Please use “Code Formatting” in your post above to make it better readable.

2 Likes

The error message “MALFORMED” tells that this file is broken.
Have you checked if you can open the xlsx file with MS Excel App successfully?

1 Like

I was not aware that MALFORMED meant a corrupted file.
I have replaced the file with a new one and the script is working again as expected.

THANK YOU! :slight_smile:

1 Like