Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用ApachePOI解析Excel文件_Java_Apache Poi - Fatal编程技术网

Java 不使用ApachePOI解析Excel文件

Java 不使用ApachePOI解析Excel文件,java,apache-poi,Java,Apache Poi,我知道我们可以使用ApachePOI解析Excel文件并获取数据。但我听说一件奇怪的事情,excel文件可以通过与解析CSV类似的方式传递(比如从文件流中读取文件,并用“逗号”分隔符分隔每个列值)。解析Excel时,我们必须使用tab作为分隔符。可能吗?如果是的话,那么为什么Apache会提出如此复杂的框架呢。我很困惑。有人能帮我吗?你可能把听到的东西弄糊涂了,或者告诉你的人也弄糊涂了 Excel文件的某些部分可以(某种程度上)存储为CSV文件,因为表格数据结构非常适合CSV文件格式。但是,如果

我知道我们可以使用ApachePOI解析Excel文件并获取数据。但我听说一件奇怪的事情,excel文件可以通过与解析CSV类似的方式传递(比如从文件流中读取文件,并用“逗号”分隔符分隔每个列值)。解析Excel时,我们必须使用tab作为分隔符。可能吗?如果是的话,那么为什么Apache会提出如此复杂的框架呢。我很困惑。有人能帮我吗?

你可能把听到的东西弄糊涂了,或者告诉你的人也弄糊涂了

Excel文件的某些部分可以(某种程度上)存储为CSV文件,因为表格数据结构非常适合CSV文件格式。但是,如果以CSV格式保存,则每个单元格中只会出现纯文本—您将丢失所有格式信息、任何图形、多个工作表等


ApachePOI使用的是原生XLS excel格式,因此可以处理excel中的所有内容,而不仅仅是某些单元格中的限制性纯文本。CSV文件有其用途,但它们绝对不是普通Excel文件的直接替代品。

CSV是一种文本格式,因此可以使用分隔符对其进行解析。旧Excel是一种二进制和专有格式,因此需要巧妙的解码。新的Excel格式是Zippped XMLs,但在将其转换为像逐个读取单元格这样简单的内容之前,还应该了解该文档的结构。因此,您的问题的答案是否定的,您需要使用ApachePOI,而且-这没有什么错


作为补充说明,在成为一名优秀开发人员的道路上,在寻求帮助之前,你需要学习做一些自己的研究。弄脏你的手是学习东西的最好方法。

我试图在不使用任何外部JAR(如POI或其他)的情况下读/写excel文件。我能够写xls格式的文件。这是我的密码

FileWriter fwriter = new FileWriter(file,true);
writer = new BufferedWriter(fwriter);
writer.newLine();
writer.write("a"    + "\t");
writer.write("b"    + "\t");
writer.write("c"    + "\t");
writer.write("d"    + "\t");
writer.write("e"    + "\t");
writer.write("f"    + "\t");
读取文件 这是我的阅读代码

if(file != null) {
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new FileReader(file));
                String line;
                while((line = reader.readLine()) != null) {
                    String[] component = line.split("\\t");
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

如果我用4x4单元格创建office 2003 Microsoft Excel文件,其中只包含文本数据。然后,如果我读取输入流中的文件并尝试使用“\t”作为分隔符。那么没有ApachePOI它会工作吗?显然不会工作。嘿,谢谢你,伙计,我尽了最大努力弄脏了我的手。所有的方法都说我不能做制表符分隔的语法分析,但是坚持这样做的人对他所说的话非常肯定。这就是我寻求你帮助的原因有时候人们有错误的信息,有时候这些人很固执。对您来说,“制表符分隔”应该是指“文本文件”。文本文件在记事本中打开。尝试在记事本中打开一个Excel文件,看看会发生什么。这本身不是Excel格式,您正在写入/读取的是一个以制表符分隔的文本文件。Excel打开CSV或TSV的方式与打开自己专有格式的文件的方式相同。
InputStream is = new FileInputStream(new File(filepath));
        StreamingReader reader=null;
        try {
            reader = StreamingReader.builder()
                    .rowCacheSize(100)     
                    .bufferSize(4096)     
                    .sheetIndex(0)        
                    .read(is);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }finally{
            is.close();
        }
        //pass here to reader and itrate it 
          for (Row row : reader) {
            if (row.getRowNum()!=0){
                for (Cell cell : row) {
              // write ur logic to store ur value 
                }

            }
        }