吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 344|回复: 6
收起左侧

[经验求助] java 导入excel报错

[复制链接]
据守 发表于 2024-8-12 16:33
100吾爱币
本帖最后由 据守 于 2024-8-12 16:40 编辑

Java swt 项目  JDK17

引用外部库:
org.eclipse.swt.win32.win32.x86_64_3.120.0.v20220530-1036.jar
poi-4.0.0.jar
poi-ooxml-4.0.0.jar
poi-ooxml-schemas-4.0.0.jar
xmlbeans-3.0.1.jar
commons-collections4-4.2.jar
commons-compress-1.18.jar

出问题代码的功能是选择excel文件并读取内容。
其中报错在:创建XSSFWorkbook对象

这是UI界面的代码:
[Java] 纯文本查看 复制代码
        //“导入账号”按钮,设置文本、尺寸及监听事件


        public static void main(String[] args)  {
                    
        Display display = new Display();
        
        Shell shell = new Shell(display);

        Button buttonlord = new Button(shell, SWT.PUSH);

        buttonlord.setText("导入账号");

        buttonlord.setBounds(350 ,10 ,100, 40);


        buttonlord.addListener(SWT.Selection, event -> {

                FileDialog dialog = new FileDialog(shell, SWT.OPEN);

            dialog.setText("选择Excel文件");

            dialog.setFilterExtensions(new String[] {"*.xlsx"});

            String path = dialog.open(); 

            if(path!=null) {

                     //System.out.println(path);

                         try {

                                                snum[0] = GetStudent.getstu(path);

                                        } catch (FileNotFoundException e1) {

                                                // TODO 自动生成的 catch 块

                                                e1.printStackTrace();

                                        } catch (InvalidFormatException e1) {

                                                // TODO 自动生成的 catch 块

                                                e1.printStackTrace();

                                        } catch (IOException e1) {

                                                // TODO 自动生成的 catch 块

                                                e1.printStackTrace();

                                        }                     

            }
}

        }); 


GetStudent.java 代码:
[Java] 纯文本查看 复制代码
public class GetStudent {

        public static int getstu(String path) throws FileNotFoundException, IOException, InvalidFormatException {

                 Charset charset = Charset.forName("UTF-8"); //设置BIG5也没用

                 FileInputStream fis = new FileInputStream(path);

                 InputStreamReader isr = new InputStreamReader(fis);

                 OPCPackage pkg = OPCPackage.open(fis);

         // 创建XSSFWorkbook对象,下面这一句总是报错

             XSSFWorkbook Workbook = new XSSFWorkbook(pkg);

             ......

}

}


最开始创建XSSFWorkbook对象的代码,还是报错:
[Java] 纯文本查看 复制代码
public class GetStudent {

public static int getstu(String path) throws FileNotFoundException, IOException{

XSSFWorkbook Workbook = new XSSFWorkbook(new FileInputStream(path));
......
}
}


在eclipse中运行正常,可以读取excel数据。导出jar转成exe后,导入空表格不报错。
但是表格有任何数据,则“创建XSSFWorkbook对象”就报错。
报错信息如下:


[Java] 纯文本查看 复制代码
java.lang.ExceptionInInitializerError
        at org.apache.poi.ss.util.CellReference.<init>(CellReference.java:109)
        at org.apache.poi.xssf.usermodel.XSSFCell.<init>(XSSFCell.java:116)
        at org.apache.poi.xssf.usermodel.XSSFRow.<init>(XSSFRow.java:74)
        at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:269)
        at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:232)
        at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:219)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:452)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:417)
        at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:286)
        at com.jushou.cc.GetStudent.getstu(GetStudent.java:30)
        at com.jushou.cc.SWTBrowser.lambda$0(SWTBrowser.java:157)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
        at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4251)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4068)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3645)
        at com.jushou.cc.SWTBrowser.main(SWTBrowser.java:776)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
        at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)

Caused by: java.nio.charset.UnsupportedCharsetException: Big5
        at java.base/java.nio.charset.Charset.forName(Charset.java:528)
        at org.apache.poi.util.StringUtil.<clinit>(StringUtil.java:39)
        ... 24 more


最佳答案

查看完整内容

Caused by: java.nio.charset.UnsupportedCharsetException: Big5 把异常原因贴百度 自己学会根据 异常解决问题 这是程序员必修课程

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nevermyloves 发表于 2024-8-12 16:33
Caused by: java.nio.charset.UnsupportedCharsetException: Big5
把异常原因贴百度 自己学会根据 异常解决问题
这是程序员必修课程
qfmy2024 发表于 2024-8-12 22:04
报错不是提示不支持Big5编码嘛,楼主再看一下,百度一下或者chatGPT
mallorJava 发表于 2024-8-12 22:43
写代码最大的禁忌就是伸手主意,最好先定位问题是什么,再去百度找答案,成长会快些,
 楼主| 据守 发表于 2024-8-13 08:14
mallorJava 发表于 2024-8-12 22:43
写代码最大的禁忌就是伸手主意,最好先定位问题是什么,再去百度找答案,成长会快些,

我这明显是查过,找不出原因啊
wangzhengyan 发表于 2024-8-13 14:01
根据异常信息看到静态资源初始化抛了异常未捕获,报的错,具体原因是JVM不含Big5字符集。
52pojieyang2022 发表于 2024-8-13 17:47
看着像是缺少字符集啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 07:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表