用java读取excel文件,不包括第一行

用java读取excel文件,不包括第一行,java,excel,apache-poi,ireport,Java,Excel,Apache Poi,Ireport,我试图从使用xlsx文件的JasperReport模板自动创建报告,我从excel文件读取报告的方法如下: String[] columnNames = new String[]{"arg1", "arg2", "arg3", "arg4", "arg5"}; int[] columnIndexes = new int[]{0, 1, 2, 3, 4}; ds = new JRXlsxDataSource(JRLoader.getLocationInputStream("../Book2.xls

我试图从使用xlsx文件的JasperReport模板自动创建报告,我从excel文件读取报告的方法如下:

String[] columnNames = new String[]{"arg1", "arg2", "arg3", "arg4", "arg5"};
int[] columnIndexes = new int[]{0, 1, 2, 3, 4};
ds = new JRXlsxDataSource(JRLoader.getLocationInputStream("../Book2.xlsx"));
            ds.setColumnNames(columnNames, columnIndexes);
但问题是,excel文件应该只包含数据,我应该手动确定列,我的问题是如何直接从第一行读取列,然后将文件的其余部分输入到
JRXlsxDataSource
方法(如果未排除,则将生成类型错误,预期为
Long
,但实际为
String
)? 多谢各位

更新:我已尝试获取第一行,然后将其删除,但无法保存文件,因为POI避免对文件进行修改:

public static void removeRow(HSSFSheet sheet, int rowIndex) {
    int lastRowNum = sheet.getLastRowNum();
    if (rowIndex >= 0&&rowIndex < lastRowNum) {
        sheet.shiftRows(rowIndex + 1, lastRowNum, -1);
    }
    if (rowIndex == lastRowNum) {
        HSSFRow removingRow = sheet.getRow(rowIndex);
        if(removingRow != null) {
            sheet.removeRow(removingRow);
        }
    }
}

public static String[] getRow(HSSFSheet sheet) {
    String[] values = null;
    for (int i = 0; i < 5; i++) {
        values[i] = sheet.getRow(0).getCell(0).toString();  
    }
    return values;      
}
public static void remove OW(HSSF表单,int rowIndex){
int lastRowNum=sheet.getLastRowNum();
如果(rowIndex>=0&&rowIndex
你知道吗?你不能像对待txt文件那样对待xlsx文件,它们的格式完全不同(基于xml)结构。@deHaar这就是为什么我要问的,为了了解这种可能性,如果可能,那么问题就解决了,如果不可能,那么这也意味着问题已经解决了,我不再搜索如何解决,而是格式化我的数据,使其与模板兼容。很好,但请编辑您的问题,而不是推您正在使用
HSSFWorkbook
但您有一个xlsx文件,我认为需要将其读入
XSSFWorkbook
。这与
XSSFSheet
相同,而不仅仅是
Sheet
XSSFRow
而不是
Row
。您为什么总是
getCell(0)
?这将在每次迭代中为您提供行中的第一个单元格。此外,您可以使用
cell.getStringCellValue()
而不是
cell.toString()
@Noblesse我不清楚您想要什么,但我面临类似这样的问题(如果未排除,则会生成一个类型错误,应为Long,但应为String)我所做的是使用动态jasper set column type Object。有些人认为AbstractColumn djColumn=ColumnBuilder.getNew().setColumnProperty(“name”,Object.class)。setTitle(title)。setWidth(width).build();set Datatype Object.class将解决我的问题。你知道吗?你不能像对待txt文件那样对待xlsx文件,它们的格式完全不同(基于xml)结构。@deHaar这就是为什么我要问的,为了了解这种可能性,如果可能,那么问题就解决了,如果不可能,那么这也意味着问题已经解决了,我不再搜索如何解决,而是格式化我的数据,使其与模板兼容。很好,但请编辑您的问题,而不是推您正在使用
HSSFWorkbook
但您有一个xlsx文件,我认为需要将其读入
XSSFWorkbook
。这与
XSSFSheet
相同,而不仅仅是
Sheet
XSSFRow
而不是
Row
。您为什么总是
getCell(0)
?这将在每次迭代中为您提供行中的第一个单元格。此外,您可以使用
cell.getStringCellValue()
而不是
cell.toString()
@Noblesse我不清楚您想要什么,但我面临类似这样的问题(如果未排除,则会生成一个类型错误,应为Long,但应为String)我所做的是使用动态jasper set column type Object。有些人认为AbstractColumn djColumn=ColumnBuilder.getNew().setColumnProperty(“name”,Object.class)。setTitle(title)。setWidth(width).build();set Datatype Object.class将解决我的问题。