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