WritableWorkbook中write方法可以用来对xls文件写操作
但只能写一次,下面的写操作好像无效了
有什么方法可以实现来一次数据写一次,从而实现动态写操作??

解决方案 »

  1.   

    是否write方法中的对象传递了错误的引用
      

  2.   

    public class ExcelUtil {    public WritableSheet createWritableSheet(String sheetname) throws IOException {
            if (null==writableWorkbook){
                writableWorkbook = Workbook.createWorkbook(new File(filename));
            }        WritableSheet sheet = writableWorkbook.getSheet(sheetname);
            if (null!=sheet){
                throw new IOException(sheetname + " exists in " + filename);
            }
            sheet = writableWorkbook.createSheet(sheetname, 0);        return sheet;
        }
        public int writeHeader2sheet(WritableSheet sheet, List<String> headerData)
          throws WriteException,IOException {
          int count = 0;        List<String> data = headerData;        for (int j = 0; j < data.size(); j++) {
              //format
              jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat();
              wcf.setWrap(true);
              wcf.setAlignment(jxl.format.Alignment.CENTRE);
              wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
              jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES,
                      10, WritableFont.BOLD, true);
              wcf.setFont(wf);          //Label(列号,行号 ,内容 )
              jxl.write.Label colData = new jxl.write.Label(j, 0,data.get(j),wcf); 
              sheet.addCell(colData);
            }        count++;      rowCount = rowCount + count;      return count;
        }
        public int writeData2sheet(WritableSheet sheet, int start, List<List<String>> rowData)
          throws WriteException,IOException {
          int count = 0;      for (int i = 0; i < rowData.size(); i++) {
            List<String> data = rowData.get(i);        //row height
            sheet.setRowView(rowCount+i, 500*4);        for (int j = 0; j < data.size(); j++) {
              //format
              jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat();
              wcf.setWrap(true);
              wcf.setAlignment(jxl.format.Alignment.LEFT);
              wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);          //column width
              sheet.setColumnView(j, j==0?10:50);          //Label(列号,行号 ,内容 )
              jxl.write.Label colData = new jxl.write.Label(j, rowCount + start + i,data.get(j),wcf);  
              sheet.addCell(colData);
            }        count++;
          }      rowCount = rowCount + count;      return count;
        }    public void close() throws IOException,WriteException {
            if (null!=writableWorkbook){
                writableWorkbook.write(); 
                writableWorkbook.close();
                writableWorkbook = null;
            }
        }    public int writeData2sheet(WritableSheet sheet, List<List<String>> rowData)
        throws Exception {
            return writeData2sheet(sheet, 0, rowData);
        }
        
        public void write() throws IOException,WriteException{
         if (null!=writableWorkbook){
                writableWorkbook.write();         }
        }    public static void main(String[] args) {
            try {
                List<List<String>> allData = new ArrayList<List<String>>();
                List<String> data = new ArrayList<String>();
                int start = (int)System.currentTimeMillis()&0xffff;
                for (int i = start; i < start+10; i++) {
                    data.add(String.valueOf(i));
                }
                allData.add(data);            ExcelUtil excelUtil = new ExcelUtil("test.xls");
                WritableSheet writableSheet = excelUtil.createWritableSheet(TextFormat.getDateTime(TextFormat.YYYYMMDD+TextFormat.HHMMSS));            int count = excelUtil.writeHeader2sheet(writableSheet, data);
                excelUtil.write();//这个能正常写入            count = excelUtil.writeData2sheet(writableSheet, allData);
                excelUtil.write();//这个不能正常写入        } catch (Exception e) {
                e.printStackTrace();
            }
        }}
      

  3.   

    每次写入 都new一次 应该没问题
    WritableWorkbook workBook = Workbook.createWorkbook(new File(file));