Jxlを使用して既存のExcelシートを編集できません。それは常に新しいものを作成します。誰かがそれを手伝ってくれませんか。小さなサンプルコードを教えてください。
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のチュートリアルページ から直接取得されます。
これはかなり古い質問ですが、誰かが同じ問題に遭遇した場合は、正しいフォーマット(フォントの種類、色など)を保持するために、ラベルにキャストする前にセルのフォーマットを保存してから、強制的に前のフォーマットへのセル。コード:
CellFormat cfm = cell.getCellFormat();
Label l = (Label) cell;
l.setString("modified cell");
cell.setCellFormat(cfm);
//there is god example of it, you can copy in ur project and check it out, to
//understand how it works
Workbook wk = Workbook.getWorkbook(new File("ex.xls"));
//
WritableWorkbook wkr = Workbook.createWorkbook(new File("modifed.xls"), wk);
/* second line makes copy of wk Excel file object /creates a readable spreadsheet.
both are now similar and i can Modify exiting wkr spreadsheets */
//next 2 line retrieve sheet number 0 and cell (1,1)
WritableSheet getsht = wkr.getSheet(0);
WritableCell getcl = getsht.getWritableCell(1, 1);
//making own font
WritableFont ft = new WritableFont(WritableFont.ARIAL, 20 , WritableFont.BOLD, true , UnderlineStyle.SINGLE);
//making Format, which uses font
WritableCellFormat form = new WritableCellFormat( ft);
Number nb = ( Number ) getcl ;
nb.setCellFormat( form );
wkr.write();
wkr.close();
私は個人的にこのコードを使用してxlsファイルを追加し、存在しない場合は作成します。
jxl 2.6の使用:
public class Excel {
private String fileName = "Excel_file.xls";
private String sheetName = "sheet1";
private WritableWorkbook writableWorkbook;
private int rowCount;
private Workbook wb;
// assigns checks if file exists or not, both cases we assign it to a WritableWorkbook // object so that we can write to it.
private void assignWorkBook() throws IOException, BiffException {
// File f = new File(System.getProperty("user.dir") +"\\"+fileName);
File inp = new File(fileName);
try{
wb = Workbook.getWorkbook(inp);
writableWorkbook = Workbook.createWorkbook(inp, wb);
} catch (FileNotFoundException e){
writableWorkbook = Workbook.createWorkbook(inp); //Create a new one
}
}
public int getRowCount() {
return rowCount;
}
// this function writes a vector to an Excel file, checks if there is already a sheet
// with that name or not, and uses it. then we have to close the Workbook object before
// we could write to the file, and then we save the file.
// That is, the file is always saved after writing to it.
public void writeRow(Vector<String> playerVector) throws WriteException, IOException, BiffException {
assignWorkBook();
WritableSheet excelSheet;
if(writableWorkbook.getNumberOfSheets() == 0) {
excelSheet = writableWorkbook.createSheet(sheetName, 0);
}
else {
excelSheet = writableWorkbook.getSheet(sheetName);
}
rowCount = excelSheet.getRows();
int colCount = 0;
for(String playerStat:playerVector) {
Label label = new Label(colCount++, rowCount, playerStat);
excelSheet.addCell(label);
}
if(wb != null) {
wb.close();
}
writableWorkbook.write();
writableWorkbook.close(); //everytime save it.
}
}