2016-02-12 3 views
0

У меня есть метод Java writeToExcel (String sheetName, Map), который создает новый лист с именем «sheetName» в новом файле excel и записывает в него данные карты. Когда я вызываю метод с разными аргументами sheetName более одного раза, существующий лист заменяется последним вызываемым. Я хочу создавать новые листы в одном и том же файле excel каждый раз, когда метод вызывается с другим аргументом sheetName, без потери существующих листов. Вот мой код.Добавление листа в существующий файл excel с использованием Java и Apache POI

public static void writeToExcel(String fileName,Map<Integer,String[]> excelData){ 
    String filePath="/Data/excel.xlsx"; 
    XSSFWorkbook workbook=new XSSFWorkbook(); 
    XSSFSheet sheet=workbook.createSheet(fileName); 
    Set<Integer> keySet=excelData.keySet(); 
    int passedCount=0; 
    int failedCount=0; 
    int rowNo=0; 
    int cellNo=0; 
    Row row; 
    Cell cell; 
    try{ 
     File file=new File(filePath); 
     FileOutputStream output=new FileOutputStream(file); 
     for(Integer key:keySet){ 
      row=sheet.createRow(rowNo++); 
      String[] dataToWrite=excelData.get(key); 
      cellNo=0; 
      for(String str:dataToWrite){ 
       cell=row.createCell(cellNo++); 
       cell.setCellValue(str); 
      } 
     } 
     workbook.write(output); 
     output.close(); 
     workbook.close(); 
    } 
    catch(FileNotFoundException e){ 
     e.printStackTrace(); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 
+1

Сообщение предоставляет [MCVE] (http://stackoverflow.com/help/mcve). Обязательно скопируйте код в новый проект * и убедитесь, что он компилируется и запускается, прежде чем публиковать его здесь. – user1803551

ответ

0

Кажется, что вы всегда создаете новую книгу во второй строке метода. Таким образом, это не лист, который заменяется, но и вся книга. Лучшее использование

XSSFWorkbook workbook=new XSSFWorkbook(new File(filePath)); 

Это должно сделать трюк.

-1

XSSFWorkbook рабочая книга = новый XSSFWorkbook (новый файл (filePath)); => XSSFWorkbook workbook = новая XSSFWorkbook (filePath); как никакой конструктор костюма для рабочей книги XSSFWorkbook = новый XSSFWorkbook (новый файл (filePath))

+1

Добро пожаловать в Stackoverflow. Измените свой ответ для форматирования кода. Сейчас это невыносимо. Можете ли вы также расширить свой ответ? это может помочь акиру и другим членам лучше понять ваше решение, предоставляя контекст для его получения. –

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