JavaでExcelファイルを編集する方法があるかどうか知りたいのですが。例:Excelシートを入力している場合、他のセルの値を残したまま、特定のセルの値を変更できますか?前もって感謝します
6 に答える
I have some decent results with the Apache POI library: http://poi.apache.org/
It even works on Android.
JXL
読み取り効率を高めるように設計されています (これが API の主な用途であるため)。パフォーマンスを向上させるために、出力情報に関連するデータ (たとえば、フォントなどのすべての書式設定情報) は、スプレッドシートの読み取り時に解釈されません。
ただし、このスプレッドシートを変更する必要がある場合は、copy メソッドを使用して取得できるさまざまな書き込みインターフェイスへのハンドルが必要です。
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));
WritableWorkbook copy = Workbook.createWorkbook(new File("temp.xls"), workbook);
これにより、既に読み込まれた情報がコピーされ、スプレッドシートの書き込みに必要なフィールドを解釈するための追加処理が実行されます。この読み取り最適化戦略の欠点は、1 つだけではなく 2 つのスプレッドシートがメモリに保持されるため、メモリ要件が 2 倍になることです。
しかし、この後は、やりたいことが何でもできます。お気に入り:
WritableSheet sheet2 = copy.getSheet(1);
WritableCell cell = sheet2.getWritableCell(1, 2);
if (cell.getType() == CellType.LABEL)
{
Label l = (Label) cell;
l.setString("modified cell");
}
copy.write();
copy.close();
workbook.close();
はい、Andy Khan のJExcelライブラリを使えばうまくできます。
はい、ApachePOIAPIを使用してExcelシートを編集できます
これを行うには何らかのユーティリティを作成する必要がありますが、JXL で行うことができます。
SheetCopier.java、L996+997 にバグがあることに注意してください: 間違っています:
if (c.getCellFeatures() != null &
c.getCellFeatures().hasDataValidation())
次のようにする必要があります。
if (c.getCellFeatures() != null &&
c.getCellFeatures().hasDataValidation())
Andy Khans の電子メールを持っていないので、彼に連絡できません。ソースも再構築してください。
補足として、Apache poi は定命の者にとってはあまりにも複雑で、クラス名はばかげています。私の経験では、Apache コードは友好的ではなく、役に立たず、堅牢ではありません。だから私は可能な限りApacheを避けます。
JXLを使用してこれを行うことができます
JXL は同じファイルを読み書きする直接的な方法を提供しません (不便に思えるかもしれませんが、JXL は、これは読み取りが主な機能 (ほとんどの場合使用される) であり、これによりパフォーマンスが向上するためであると述べています。私自身のワークブック)
例
import java.io.File;
import java.util.Date;
import jxl.*;
import jxl.write.*;
//open read to your workbook (readonly)
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));
//create a copy workbook on which you will write
WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"), workbook);
//modify existing cell
WritableSheet sheet2 = copy.getSheet(1);
WritableCell cell = sheet2.getWritableCell(2, 4);
NumberFormat fivedps = new NumberFormat("#.#####");
WritableCellFormat cellFormat = new WritableCellFormat(fivedps);
cell.setFormat(cellFormat);
//add cells
Label label = new Label(0, 2, "New label record");
sheet2.addCell(label);
Number number = new Number(3, 4, 3.1459);
sheet2.addCell(number);