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");
}
}
我正在构建一个条形码阅读应用程序,现在下面代码的问题是,当我在o / p中获得excel文件时,只有以表格格式获取的最后数据才能进入o / p中的excel文件。我需要一些建议,我哪里出错了,应该做些什么。我已经用system.out.printlln()检查了所有内容;但没有找到任何解决方案。
Thanks in advance and double to one who helps to get right solution.
答案 0 :(得分:2)
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循环之前创建工作簿
更改写入方法以传递工作簿
public void write(WritableWorkbook workbook) throws IOException, WriteException {
File file = new File(inputFile);
WritableSheet excelSheet = workbook.getSheet(0);
................
答案 1 :(得分:0)
原因是每次调用时都要在方法中创建工作簿,以便清理旧数据并添加新数据。
从方法中删除它并移动到其他地方执行一次。
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
我建议你将初始化移到构造函数。
writeExcel
中的元素 在类级别声明这些变量意味着您声明了变量的位置。所以你可以初始化wordExcel
。