5

Apache POI を使用して Excel ファイルを解析し、データを取得できることはわかっています。しかし、CSVを解析するのと同様の方法でExcelファイルを渡すことができるという奇妙なことを聞​​きました(ファイルストリームからファイルを読み取り、各列の値を「コンマ」区切り記号で区切るだけです)。Excel を解析するときは、タブを区切り文字として使用する必要があります。出来ますか?はいの場合、なぜ Apache はこのような複雑なフレームワークを思いついたのでしょうか。私は困惑しています。誰かが私を助けることができますか?

4

4 に答える 4

5

CSV はテキスト形式なので、区切り記号を使用して解析できます。古い Excel はバイナリ形式で独自の形式であるため、巧妙なデコードが必要です。新しい Excel 形式は圧縮された XML ですが、セルを 1 つずつ読み取るような単純なものに変換する前に、このドキュメントの構造を理解する必要があります。したがって、あなたの質問に対する答えはノーです。Apache POI を使用する必要があります。また、問題はありません。

余談ですが、優れた開発者になるには、助けを求める前に、自分で少し調べてみる必要があります。手を汚すことは、物事を学ぶための最良の方法です。

于 2012-04-20T15:19:27.233 に答える
2

あなたが聞いたこと、またはあなたに言った人が混乱していたことをおそらく混乱させたでしょう。

表形式のデータ構造は CSV ファイル形式にうまく適合するため、Excel ファイルの一部は(ある程度) CSV ファイルとして保存できますただし、CSV 形式で保存すると、各セルにプレーン テキストが表示されるだけで、すべての書式設定情報、グラフ、複数のワークシートなどが失われます。

ネイティブの XLS Excel 形式は、Apache POI が使用するものであり、特定のセル内の限定的なプレーン テキストだけでなく、すべてを Excel で処理できます。CSV ファイルには用途がありますが、通常の Excel ファイルを直接置き換えるものではありません。

于 2012-04-20T15:14:29.227 に答える
0

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();
                    }
                }
            }
于 2014-05-03T21:08:14.380 に答える