我知道我们可以使用 Apache POI 来解析 Excel 文件并获取数据。但我听说一个奇怪的事情是,excel 文件可以以类似于我们解析 CSV 的方式传递(就像只是从文件 Stream 中读取文件并用“逗号”分隔符分隔每个列值)。当我们解析 Excel 时,我们必须使用制表符作为分隔符。是否可以?如果是,那么为什么 Apache 会提出如此复杂的框架。我很困惑。有人能帮我吗?
4 回答
CSV 是一种文本格式,因此可以使用分隔符对其进行解析。旧 Excel 是一种二进制和专有格式,因此需要巧妙的解码。新的 Excel 格式是压缩的 XML,但在将其转换为像逐个读取单元格这样简单的东西之前,还应该了解该文档的结构。所以你的问题的答案是否定的,你需要使用 Apache POI,而且 - 这没有任何问题。
附带说明一下,在成为一名优秀开发人员的道路上,您需要在寻求帮助之前学会做一些自己的研究。弄脏你的手是学习东西的最好方法。
您可能对所听到的内容感到困惑,或者告诉您的人感到困惑。
Excel 文件的某些部分可以(某种程度上)存储为 CSV 文件,因为表格数据结构非常适合 CSV 文件格式。但是,如果您以 CSV 格式保存,那么您只会在每个单元格中获得纯文本 - 您会丢失所有格式信息、任何图表、多个工作表等。
本机 XLS excel 格式是 Apache POI 使用的,因此可以处理 excel 中的所有内容,而不仅仅是某些单元格中的限制性纯文本。CSV 文件有其用途,但它们绝对不是普通 Excel 文件的直接替代品。
我尝试在不使用任何外部 JAR(如 POI 或任何其他 JAR)的情况下读取/写入 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();
}
}
}
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
}
}
}