如何使用apache POI将新工作表添加到现有excel工作簿?

我正在尝试将List数据写入一本工作簿中的多个excel表。 与第一个列表一样,代码将创建新工作簿并为列表[1]创建新工作表,对于第二个列表,它将在现有工作簿中创建新工作表,依此类推。 所以我写下面的代码。 但它不起作用,我只能看到列表[1]的第一张表。 有人可以帮我提供任何替代解决方案吗?

我写的下面的代码

ArrayList<List> tempresultdata=this.getSummaryList(); HSSFWorkbook workbook = new HSSFWorkbook(); String fileName="Path\\To\\XLS"; File file = new File(fileName); FileOutputStream out; if(!file.exists()) // This will create new workbook with new sheet if it doesnt exists{ HSSFSheet mySheet = workbook.createSheet(sheetname); writeExcel(mySheet,tempresultdata); } else // This add new sheet to above created workbook { try { HSSFWorkbook myWorkBook = (HSSFWorkbook) WorkbookFactory.create(file); workbook=myWorkBook; HSSFSheet mySheet = (HSSFSheet) workbook.createSheet(sheetname); writeExcel(mySheet,tempresultdata); } catch (InvalidFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try{ out = new FileOutputStream(fileName,true); workbook.write(out); out.close(); }catch(Exception e){ e.printStackTrace(); } 

谢谢,Priyank Shah

如果文件不存在则此代码创建新文件并创建示例sheet1但如果文件存在则将新工作表添加到现有excel文件。

  HSSFWorkbook workbook = null; File file = new File(context.getExternalFilesDir(null), "Sample.xls"); FileOutputStream fileOut = new FileOutputStream(file); if (file.exists()) { try { workbook = (HSSFWorkbook)WorkbookFactory.create(file); } catch (InvalidFormatException e) { e.printStackTrace(); } HSSFSheet sheet = workbook.createSheet("Sample sheet2"); } else{ workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sample sheet1"); } workbook.write(fileOut); fileOut.close(); 

看起来你只是写出workbook sheet而不是workbook

您可以使用Bhaskar的代码来解决问题并使用WorkbookFactory,您可能需要下载poi-ooxml-3.7.jar文件。

这是给你的链接:

http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.poi/poi-ooxml/3.7

要将多个Excel工作表添加到新的Excel文件,需要从一个工作簿创建这些工作表,并将其写入文件输出流一次

 import java.io.*; import java.util.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; public class JustATest { public static void main(String[] args) throws Exception { XSSFWorkbook AWorkbook = new XSSFWorkbook(); //Create blank workbook for (int i = 0; i < 10; i++) { XSSFSheet spreadsheet = AWorkbook.createSheet(" Employee "+i); // the follwing code is to create dummy data in sheets // is similar to the one at tutorialPoint.com XSSFRow row; //This data needs to be written (Object[]) Map < String, Object[] > empinfo = new TreeMap< String, Object[] >(); empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" }); for (int j = 0; j < i; j++) { empinfo.put( j+2+"", new Object[] { j+2+"", "Fadel K", "Technical Manager" }); } //Iterate over data and write to sheet Set keyid = empinfo.keySet(); int rowid = 0; for (String key : keyid){ row = spreadsheet.createRow(rowid++); Object [] objectArr = empinfo.get(key); int cellid = 0; for (Object obj : objectArr){ Cell cell = row.createCell(cellid++); cell.setCellValue((String)obj); } } // dummy data creation over. } // here you write all sheets at once, by writing the entier workbook FileOutputStream out = new FileOutputStream(new File("AllData.xlsx")); AWorkbook.write(out); out.close(); } } 

使用现有工作簿时,不应创建文件对象,只需要将文件位置提供给FileInputStream对象并将其引用传递给工作簿对象,然后对现有文件执行任何操作。 要添加工作表,只需使用create Method命令

 public void AddsheetintoExistingworkbook(String sheetname) throws IOException, InvalidFormatException{ //***************************Add a sheet into Existing workbook*********************************************** String path="C:\\Workspace\\Selenium_2.53\\src\\InputFiles\\Temp.xlsx"; fileinp = new FileInputStream(path); workbook = new XSSFWorkbook(fileinp); workbook.createSheet(sheetname); fileOut = new FileOutputStream(path); workbook.write(fileOut); fileOut.close(); System.out.println("File is written successfully"); }