繁体   English   中英

JTable导出到Excel文件时避免NullPointerException

Avoid NullPointerException When JTable Exports to Excel File

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个没有值的JTable(空列数据)。 像这样,

|column 1|column 2|column 3|column 4|
-------------------------------------
|Java    |C#      |        |Ruby    |
-------------------------------------
|Java    |        |PHP     |Ruby    |

我正在尝试将此JTable导出到Excel文件。 当我按下按钮将其导出时,它给出了NullPointerException 因为那个空值。 因此,我需要忽略它并继续导出Excel文件。

这是我使用的代码,

        XSSFWorkbook xb = new XSSFWorkbook();
        XSSFSheet xs = xb.createSheet();

        //Load data to TreeMap
        TreeMap<String,Object[]> data = new TreeMap<>();

        //Add Rows and Cells
        data.put("-1", new Object[]{pageTable.getColumnName(0), pageTable.getColumnName(1), pageTable.getColumnName(2), pageTable.getColumnName(3), pageTable.getColumnName(4), pageTable.getColumnName(5), pageTable.getColumnName(6)});

        for(int i = 0; i<pageTable.getRowCount(); i++)
        {
            data.put(Integer.toString(i), new Object[]{getCellValue(i, 0), getCellValue(i, 1), getCellValue(i, 2), getCellValue(i, 3), getCellValue(i, 4), getCellValue(i, 5), getCellValue(i, 6)});
        }

        //Write data to Excel
        Set<String> ids = data.keySet();
        XSSFRow row;
        int rowID = 0;

        for(String key: ids)
        {
            row = xs.createRow(rowID++);

            //Get data as per Key
            Object[] values = data.get(key);

            int cellID = 0;
            for(Object o: values)
            {
                Cell cell = row.createCell(cellID++);
                cell.setCellValue(o.toString());
            }
        }

还有getCellValue方法;

private String getCellValue(int x, int y)
{
    return pageTable.getValueAt(x, y).toString();
}

它给出了这一行的原因,

data.put(Integer.toString(i), new Object[]{getCellValue(i, 0), getCellValue(i, 1), getCellValue(i, 2), getCellValue(i, 3), getCellValue(i, 4), getCellValue(i, 5), getCellValue(i, 6)});

那么我该如何解决呢? 有什么办法可以避免这种情况?

我在这里先向您的帮助表示感谢! 最好的祝福。

1 个回复

正如您所说的,某些值可以为null,因此在此for循环中,

for(Object o: values)
{
    Cell cell = row.createCell(cellID++);
    cell.setCellValue(o.toString());
}

o.toString()必须导致NullPointerException。

只需从for循环中更改第二行,

cell.setCellValue(o.toString());

cell.setCellValue(o==null?"":o.toString());

并且这应该避免NPException,并且您的代码应该可以正常工作。

让我知道这是否行得通,否则将进一步为您提供帮助。

编辑1:

只需再读一遍,就会发现您怀疑使用此方法的NPE。

private String getCellValue(int x, int y)
{
    return pageTable.getValueAt(x, y).toString();
}

如果此return语句导致了这种情况,那么在未检查getValueAt中的空值并将您的方法更改为此之前,不要调用toString方法,

private String getCellValue(int x, int y)
{
    if( pageTable.getValueAt(x, y) == null) {
        return "";
    } else {
        pageTable.getValueAt(x, y).toString();
    }
}
1 将JTable数据导出到Excel

我想将jtable数据导出到Excel中。首先我必须保存excel文件。 但是我想直接将jtable内容导出到Excel中,然后再保存excel文件。问题是,如果先保存文件,并且必须将多个jtable导出到excel中,那么由于文件的原因,所有这些文件都会被覆盖名字。我不知道我在哪里错。 请 ...

2 Kendo Grid:导出到Excel时避免dataSource read()

我有一个带有剑道网格的页面。 dataSource的read方法调用自定义的REST API,该过程大约需要15秒,并返回2,000条记录。 当用户单击“导出”按钮时,通过查看浏览器的“网络”选项卡,我看到再次触发了read方法。 为什么导出功能不使用已加载的记录? 我尝试删除pag ...

4 将包含表标题的JTable数据导出到Excel文件

我需要有关此的帮助,但我做不到。 我想将JTable数据导出到excel文件。 没有错误,但是我只获取它显示的数据,并且不包括表头。 我正在Netbeans 8.2 IDE中运行此程序,并且还导入了必需的jar文件。 jtable上的数据由mysql数据库提供,我需要将其从jta ...

7 将 JTable 导出为 Excel 文件

在这里,我试图将 JTable 导出到 excel 文件中……我在控制台上没有收到任何错误……但是在 excel 表上我只有列名……我的目标是要在这个 JTable 方块中显示数据库表,在此下方有导出按钮,因此单击此按钮后,应为上面显示 JTable 创建 excel 文件。 所以无法识别实际错误 ...

8 将JTable导出到XML文件

我正在尝试将JTable导出到Microsoft Excel可以使用的文件。 最初,我将数据写入文本文件,并将扩展名设置为“ .xls” 当然,这是不专业的,Excel继续抱怨该格式过时。 是的。 无论如何,现在我正尝试将其导出到XML表中,这样便可以使用Excel打开它。 ...

9 将JTable导出到txt文件

这里有趣的小错误,希望有人能指出我发生了什么。 如果JTable中大约有4个或更少的条目,我的程序就可以写入文本文件。 一旦超过了该数量,它就会失败并引发异常,并弹出我的catch块。 不知道发生了什么。 编辑:添加了ex.printStackTrace(); 它显示了数组索 ...

10 导出到Gridview时为空的Excel文件

希望您能够帮助我。 我正在开发一个网页,该网页在aspx中生成一个可以正常工作的GridView,并且单击该按钮时会将gridview导出到excel文件。 第二种情况对我不起作用,文件为空。 这是代码: 如图所示,在asp中正确生成了Gridview。 GridViewResu ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM