Groovy在创建xlsx文件时返回错误

Groovy在创建xlsx文件时返回错误,groovy,Groovy,我有一个groovy代码来创建xlsx文件。 代码改编自java。 它在执行时返回错误。 谁能帮帮我吗 返回的错误为: No expression for the array constructor call at line: 11 column: 25. File: Script2.groovy @ line 11, column 25. data.put("1", new Object[] {""+ID+""}); ^ 代码如下:

我有一个groovy代码来创建xlsx文件。 代码改编自java。 它在执行时返回错误。 谁能帮帮我吗

返回的错误为:

No expression for the array constructor call at line: 11 column: 25. File: Script2.groovy @ line 11, column 25. data.put("1", new Object[] {""+ID+""}); ^
代码如下:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


def ID = "str123"
XSSFWorkbook workbook = new XSSFWorkbook();         
XSSFSheet sheet = workbook.createSheet("City");      
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("1", new Object[] {""+ID+""});             
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset)
{
Row row = sheet.createRow(rownum++);
Object [] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr)
{
Cell cell = row.createCell(cellnum++);
if(obj instanceof String)
cell.setCellValue((String)obj);
else if(obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
}
try 
{
FileOutputStream out = new FileOutputStream(new File("c:\\temp\\demo.xlsx"));
workbook.write(out);
out.close();            
System.out.println("success");           
} 
catch (Exception e) 
{
e.printStackTrace();    
}
import org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
def ID=“str123”
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet(“城市”);
映射数据=新树映射();
data.put(“1”,新对象[]{“+ID+”});
Set keyset=data.keyset();
int rownum=0;
用于(字符串键:键集)
{
Row-Row=sheet.createRow(rownum++);
Object[]objArr=data.get(key);
int-cellnum=0;
用于(对象对象对象:对象对象对象)
{
Cell Cell=row.createCell(cellnum++);
if(字符串的obj实例)
cell.setCellValue((字符串)obj);
else if(obj instanceof Integer)
cell.setCellValue((整数)obj);
}
}
尝试
{
FileOutputStream out=新的FileOutputStream(新文件(“c:\\temp\\demo.xlsx”);
练习册。写(出);
out.close();
System.out.println(“成功”);
} 
捕获(例外e)
{
e、 printStackTrace();
}
此行:

data.put("1", new Object[] {""+ID+""}); 
是用Java与Groovy不兼容的几种方式之一编写的。。。在Groovy中使用{}进行静态初始化失败,因为看起来您正在传递一个闭包

在我的头顶上,尝试:

data.put("1", [ID] as Object[] );  // array with one entry, the String

看起来您需要一个包含字符串的数组。

后一个数组适用于OPs代码;然而,从Groovy的角度来看,大多数都是相当冗长的/java-ish。它对我不起作用,然后我尝试在soapui/bin/ext中添加spreadsheet-builder-Groovy-2.2.1.jar,即使这样,它对我来说也不适用于spreadsheet-builder。@tainghong我上面的第二个问题是否改变了你所得到的错误?它应该可以解决您发布的问题。@billijamesdev我尝试了您的第二个代码,收到了以下消息:Type org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCache notpresentexception:Type org.openxmlformats.schemas.spreadsheetml.x2006.main。@tainghong如果没有,我建议一个新问题,正如我们已经解决了您的原始问题一样,Groovy生态系统中有一个非常好的解决方案。在Groovy中使用类似DSL的语法创建XLS(X)文档,这种方法不太冗长,也不太容易出错。