java文件只有最后一个数据被插入到文件中

package Reader; public class Write_Excel { private WritableCellFormat timesBoldUnderline; private WritableCellFormat times; private String inputFile; Thread thread = new Thread(); static String box, plc, hmi; int k=1,cnt=1; public void witeExcel(ArrayList<String> B,ArrayList<String> P, ArrayList<String> H) throws WriteException, IOException { Write_Excel test = new Write_Excel(); test.setOutputFile("C://Users//Tanmay//Desktop//Export.xls"); for (int index = 0; index < B.size(); index++) { box = B.get(index); plc = P.get(index); hmi = H.get(index); test.write(); }System.out.println("Please check the result file under C://Users//Tanmay//Desktop//Export.xls "); } 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("Serial Numbers", 0); WritableSheet excelSheet = workbook.getSheet(0); excelSheet.setColumnView(1, 15); excelSheet.setColumnView(2, 15); excelSheet.setColumnView(3, 15); createLabel(excelSheet); createContent(excelSheet); workbook.write(); System.out.println("Value of k in close method is "+k); if(k==4) { System.out.println("Condition Satisfied where value is "+k); workbook.close(); } } private void createLabel(WritableSheet sheet) throws WriteException { //System.out.println("In create label method"); // Lets create a times font WritableFont times10pt = new WritableFont(WritableFont.ARIAL, 12); // Define the cell format times = new WritableCellFormat(times10pt); // Lets automatically wrap the cells times.setWrap(true); // create create a bold font with underlines WritableFont times10ptBoldUnderline = new WritableFont( WritableFont.TIMES, 12, WritableFont.BOLD, false); timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline); // Lets automatically wrap the cells timesBoldUnderline.setWrap(false); CellView cv = new CellView(); cv.setFormat(times); cv.setSize(20); cv.setFormat(timesBoldUnderline); // Write a few headers addCaption(sheet, 0, 0, "BOX"); addCaption(sheet, 1, 0, "CPU"); addCaption(sheet, 2, 0, "HMI"); //System.out.println("Out create label method"); } private void addCaption(WritableSheet sheet, int column, int row, String s) throws RowsExceededException, WriteException { //System.out.println("In addCaption Method"); Label label; label = new Label(column, row, s, timesBoldUnderline); sheet.addCell(label); //System.out.println("Out addCaption Method"); } private void createContent(WritableSheet sheet) throws WriteException, RowsExceededException { System.out.println("In createContent Method"); addLabel(sheet, 0, k, box); addLabel(sheet, 1, k, plc); addLabel(sheet, 2, k, hmi); //System.out.println("Value of K is "+k); System.out.println("Out createContent Method"); k++; } private void addLabel(WritableSheet sheet, int column, int row, String s) throws WriteException, RowsExceededException { System.out.println("In Addlabel Method"); Label label; label = new Label(column, row, s, times); System.out.println("Value of row is "+row+" Value of column is "+column+" Value string is "+s ); sheet.addCell(label); System.out.println("Out addlabel Method"); } } 

我正在build立一个条形码读取应用程序,现在下面的代码的问题是,当我在o / p中获得excel文件时,只有以表格格式获取的最后一个数据获取在o / p的excel文件中。 我需要一些build议,我哪里错了,应该做什么。 我已经用system.out.printlln()检查了所有内容。 但没有find任何解决办法。

  Thanks in advance and double to one who helps to get right solution. 

原因是您每次打电话时都会在方法中创build工作簿,以便清理旧数据并添加新数据。

从方法中删除这个,并移动到其他地方执行一次。

  File file = new File(inputFile);//From File WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN")); WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings); workbook.createSheet("Serial Numbers", 0);/To configuration 

我build议你将你的初始化移动到构造函数中。

  • 将所有初始化移动到构造函数OR
  • writeExcel初始化元素BUT类级 声明这些variables意味着你已经声明了variables。所以你可以在wordExcel初始化这些wordExcel
  public void witeExcel(ArrayList<String> B,ArrayList<String> P, ArrayList<String> H) throws WriteException, IOException { WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN")); WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings); workbook.createSheet("Serial Numbers", 0); Write_Excel test = new Write_Excel(); test.setOutputFile("C://Users//Tanmay//Desktop//Export.xls"); for (int index = 0; index < B.size(); index++) { box = B.get(index); plc = P.get(index); hmi = H.get(index); test.write(workbook); }System.out.println("Please check the result file under C://Users//Tanmay//Desktop//Export.xls "); } 

在for循环之前移动逻辑以创build工作簿

更改写入方法以传递工作簿

  public void write(WritableWorkbook workbook) throws IOException, WriteException { File file = new File(inputFile); WritableSheet excelSheet = workbook.getSheet(0); ................