Jexcel – 用数据更新excel

我试过使用Jexcel

按照Vogella 教程中的讨论更新现有的Excel表格。

这里的问题是现有的Excel表格中已经存在的数据被新编写的excel数据所淹没。

例如,如果我在Excel中有这个

<table> <tr> <td>1</td> <td>2 </td> </tr> <tr> <td>3</td> <td>4 </td> </tr> <table> 

我想添加数据到2和4旁边的新单元格中

 <table> <tr> <td>1</td> <td>2 </td> <td>X </td> </tr> <tr> <td>3</td> <td>4 </td> <td>Y </td> </tr> <table> 

写程序执行后,这是我得到的

 <table> <tr> <td> </td> <td> </td> <td>X </td> </tr> <tr> <td> </td> <td> </td> <td>Y </td> </tr> <table> Label label; label = new Label(column, row, s, times); sheet.addCell(label); 

这是在指定的列和行添加单元格,但删除了其余的Excel数据。

我怎样才能将数据添加到现有的Excel保持数据?

以下是该计划(参考:Vogella)。 Excel工作表已经有20行和前2列的数据,我试图添加数据在第3列20行包Excel的;

 import java.io.File; import java.io.IOException; import java.util.Locale; import jxl.CellView; import jxl.Workbook; import jxl.WorkbookSettings; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class WriteExcel { private WritableCellFormat timesBoldUnderline; private WritableCellFormat times; private String inputFile; public void setOutputFile(String inputFile) { this.inputFile = inputFile; } public void write() throws IOException, WriteException { File file = new File(inputFile); WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN")); WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings); workbook.createSheet("Report", 0); WritableSheet excelSheet = workbook.getSheet(0); createLabel(excelSheet); createContent(excelSheet); workbook.write(); workbook.close(); } private void createLabel(WritableSheet sheet) throws WriteException { // Lets create a times font WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10); // Define the cell format times = new WritableCellFormat(times10pt); // Lets automatically wrap the cells times.setWrap(true); // Create create a bold font with unterlines WritableFont times10ptBoldUnderline = new WritableFont( WritableFont.TIMES, 10, WritableFont.BOLD, false, UnderlineStyle.SINGLE); timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline); // Lets automatically wrap the cells timesBoldUnderline.setWrap(true); CellView cv = new CellView(); cv.setFormat(times); cv.setFormat(timesBoldUnderline); cv.setAutosize(true); } private void createContent(WritableSheet sheet) throws WriteException, RowsExceededException { Integer salary = 1000; // Now a bit of text for (int i = 0; i < 20; i++) { // third column addLabel(sheet, 2, i, salary.toString()); // WritableCell cell = sheet.getWritableCell(2, i); // if (cell.getType() == CellType.LABEL) { // Label l = (Label) cell; // l.setString("modified cell"); // } salary += 1000; } } private void addLabel(WritableSheet sheet, int column, int row, String s) throws WriteException, RowsExceededException { Label label; label = new Label(column, row, s, times); sheet.addCell(label); } public static void main(String[] args) throws WriteException, IOException { WriteExcel test = new WriteExcel(); test.setOutputFile("c:/temp/lars.xls"); test.write(); System.out .println("Please check the result file under c:/temp/lars.xls "); } } 

您正在使用WritableWorkbook创build一个新的可写作的工作簿,而不是写上一个。 要修改现有工作簿,首先必须创build一个现有工作簿的副本,如下所示:

 Workbook workbook = Workbook.getWorkbook(new File("myfile.xls")); WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"), workbook); 

然后在副本上工作。 有关详细信息,请参阅(提取api的path)\ jexcelapi \ src \ jxl \ demo \ ReadWrite.java或导航到复制和修改此页面的电子表格。