2012-11-16 2 views
1

Я использую jExcel API для записи данных на листе excel. И ниже мой код работает нормально. Но если я пишу большое количество данных листа Excel, я получаю это exception-Как добавить другие листы в Excel, если первый лист заполнен

jxl.write.biff.RowsExceededException: The maximum number of rows permitted on 
a worksheet been exceeded 

Ниже приведен код. Как я могу записать данные на другой лист, если первый лист не вмещает больше строк. Может кто-нибудь помочь мне здесь?

public void write() throws IOException, WriteException { 

    readFileIPAddress(); 

    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 { 

    WritableFont times15pt = new WritableFont(WritableFont.TAHOMA, 11); 
    times = new WritableCellFormat(times15pt); 
    times.setWrap(true); 

    WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.TAHOMA, 13, WritableFont.BOLD, false, UnderlineStyle.SINGLE); 
    timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline); 
    timesBoldUnderline.setWrap(true); 

    CellView cv = new CellView(); 
    cv.setFormat(times); 
    cv.setFormat(timesBoldUnderline); 
    cv.setAutosize(true); 

    addCaption(sheet, 0, 0, "IP Address"); 
    addCaption(sheet, 1, 0, "Digital Element Country Code"); 
    addCaption(sheet, 2, 0, "Maxmind Country Code"); 
    addCaption(sheet, 3, 0, "Neustar City"); 
    addCaption(sheet, 4, 0, "Maxmind City"); 
    addCaption(sheet, 5, 0, "Neustar Zip Code"); 
    addCaption(sheet, 6, 0, "Maxmind Zip Code"); 
    } 

    private void createContent(WritableSheet sheet) throws WriteException, RowsExceededException { 

    NaEdgeDb edge = null; 
    try { 
    while (!workQueue.isEmpty()) { 
     String ipAddress = workQueue.take(); 

     edge = new NaEdgeDb(); 
     edge.set_server_addr(serverIPAddress); 
     edge.set_id(10); 
     if (checkIPDuplicate.add(ipAddress)) { 

      resp = GeoLocationService.getLocationIp(ipAddress, 0); 
      edge.naQueryEdge(ipAddress); 

      addNumber(sheet, 0, j, ipAddress); 

      addNumber(sheet, 1, j, (edge.edge_twoLetterCountry)); 

      addNumber(sheet, 2, j, (resp.getLocation() != null ? resp.getLocation().getCountry() : null)); 

      addNumber(sheet, 3, j, (edge.edge_city)); 

      addNumber(sheet, 4, j, (resp.getLocation() != null ? resp.getLocation().getCity() : null)); 

      addNumber(sheet, 5, j, (edge.edge_postalCode)); 

      addNumber(sheet, 6, j, (resp.getLocation() != null ? resp.getLocation().getZipCode() : null)); 
      j++; 
     } 
     } 
    } catch (Exception e) { 
     getLogger().log(LogLevel.ERROR, e.fillInStackTrace()); 
     e.printStackTrace(); 
    } 
    } 

    private void addCaption(WritableSheet sheet, int column, int row, String s) throws RowsExceededException, 
     WriteException { 
    Label label; 
    label = new Label(column, row, s, timesBoldUnderline); 
    sheet.addCell(label); 
    } 

    private void addNumber(WritableSheet sheet, int column, int row, String str) throws WriteException, 
     RowsExceededException { 
    Label number; 
    number = new Label(column, row, str); 
    sheet.addCell(number); 
    } 

Обновленный код: -

Это по-прежнему бросать же исключение. Не знаете, почему? Я уже обрабатывал создание нового листа в этом коде? Любая проблема с этим кодом?

private void createContent(WritableSheet sheet, WritableWorkbook workbook2) throws WriteException, RowsExceededException { 

    NaEdgeDb edge = null; 
    WritableSheet ws2 = workbook2.createSheet("sheet2", 2); 
    try { 
    while (!workQueue.isEmpty()) { 
     String ipAddress = workQueue.take(); // generateIPAddress(); 

     edge = new NaEdgeDb(); 
     edge.set_server_addr(serverIPAddress); 
     edge.set_id(10); 
     System.out.println(sheet.getRows()); 
     if (checkIPDuplicate.add(ipAddress) && sheet.getRows() <= 65536) { 

      resp = GeoLocationService.getLocationIp(ipAddress, 0); 
      edge.naQueryEdge(ipAddress); 

      addNumber(sheet, 0, j, ipAddress); 

      addNumber(sheet, 1, j, (edge.edge_twoLetterCountry)); 

      addNumber(sheet, 2, j, (resp.getLocation() != null ? resp.getLocation().getCountry() : null)); 

      addNumber(sheet, 3, j, (edge.edge_city)); 

      addNumber(sheet, 4, j, (resp.getLocation() != null ? resp.getLocation().getCity() : null)); 

      addNumber(sheet, 5, j, (edge.edge_postalCode)); 

      addNumber(sheet, 6, j, (resp.getLocation() != null ? resp.getLocation().getZipCode() : null)); 
      j++; 
     } else { 
      resp = GeoLocationService.getLocationIp(ipAddress, 0); 
      edge.naQueryEdge(ipAddress); 

      addNumber(ws2, 0, j, ipAddress); 

      addNumber(ws2, 1, j, (edge.edge_twoLetterCountry)); 

      addNumber(ws2, 2, j, (resp.getLocation() != null ? resp.getLocation().getCountry() : null)); 

      addNumber(ws2, 3, j, (edge.edge_city)); 

      addNumber(ws2, 4, j, (resp.getLocation() != null ? resp.getLocation().getCity() : null)); 

      addNumber(ws2, 5, j, (edge.edge_postalCode)); 

      addNumber(ws2, 6, j, (resp.getLocation() != null ? resp.getLocation().getZipCode() : null)); 
      k++; 
     } 
     } 
    } catch (Exception e) { 
     getLogger().log(LogLevel.ERROR, e.fillInStackTrace()); 
     e.printStackTrace(); 
    } 
    System.out.println("Size of HashSet:" + checkIPDuplicate.size()); 
    } 

ответ

2

Я думаю, что вы можете использовать WritableWorkbook#createSheet(java.lang.String, int)), чтобы создать новый лист в случае необходимости.

Вместо WritableSheet, pass WritableWorkbook в createContent метод. Проверьте количество строк, добавленных в текущий лист, используя некоторый счетчик. Если лист заполнен (счетчик == MAX_ROWS), создайте новый лист и сбросьте счетчик строк на 0.

+0

Как я могу использовать одно и то же в своем коде? Можете ли вы предложить некоторые изменения в моем коде? – ferhan

+0

@TechGeeky: Я уже обновлял ответ. Дайте мне знать, если вам нужно больше ресурсов. Я предполагаю, что 'createContent' - это метод, который вставляет все строки, исключая заголовки. –

+0

Спасибо Yogendra, я обновил код. Не могли бы вы посмотреть, в чем проблема в моем коде? – ferhan

Смежные вопросы