如何使用apache poi将数据写入现有的excel

我的excel工作表包含5行和2列。我想在excel中添加一列。但是当我使用WorkbookFactory时,显示错误。我导入了poi-3.8.jar和poi-ooxml-3.5-beta5.jar 。在线程“main”中给出错误exceptionjava.lang.Error:未解决的编译问题:WorkbookFactory无法parsing。请帮助我做什么。

try this import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelExample { public static void main(String[] args) throws IOException { try { FileInputStream file = new FileInputStream(new File("C:\\test.xls")); HSSFWorkbook workbook = new HSSFWorkbook(file); HSSFSheet sheet = workbook.getSheetAt(0); Cell cell = null; //Update the value of cell cell = sheet.getRow(1).getCell(2); cell.setCellValue(cell.getNumericCellValue() * 2); cell = sheet.getRow(2).getCell(2); cell.setCellValue(cell.getNumericCellValue() * 2); Row row = sheet.getRow(0); row.createCell(3).setCellValue("Value 2"); file.close(); FileOutputStream outFile =new FileOutputStream(new File("C:\\update.xls")); workbook.write(outFile); outFile.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

有关详细信息,请参阅Apache POI组件和依赖关系页面 。 你错过了一些jar子,所以编译错误。

如果你想使用HSSF(.xls)和XSSF(.xlsx),我想你在讨论WorkbookFactory的时候,你需要包括主POI jar和POI-OOXML jar,加上所有的依赖关系 。 有了你的类path上的这些jar子,你将被sorting

此外,您可能想要考虑使用诸如Apache Maven或Apache Ivy之类的东西来处理您的依赖关系,这样就可以避免像这样丢失jar问题

你在使用Maven吗?

如果是,那么请参考以下链接的最后一条评论:

http://apache-poi.1045710.n5.nabble.com/Where-is-WorkbookFactory-td2307412.html

我正在上传我的程序供您参考。 经过一番努力,我已经克服了这个问题。 Jars的详细信息:dom4j-1.6.1.jar,poi-3.9.jar,poi-ooxml-3.9.jar,poi-ooxml-schemas-3.11.jar,xmlbeans-2.6.0.jar请确保你至less有上面提到的或新的。 我包括import的细节,所以你不需要头撞你。 希望你find它使用

  ***Pojo: Employee.java*** public class Employee { private int id; private String firstName; private String lastName; public Employee(){} public Employee(int id, String firstName, String lastName) { super(); this.id = id; this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getId() { return id; } public void setId(int id) { this.id = id; } } ***Write Class: ApachePOIExcelWrite.java*** import java.io.File; import java.io.FileOutputStream; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ApachePOIExcelWrite { public static void main(String[] args) { //Blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create a blank sheet XSSFSheet sheet = workbook.createSheet("Employee Data"); //This data needs to be written (Object[]) Map<String, Object[]> data = new TreeMap<String, Object[]>(); data.put("1", new Object[] {"ID", "NAME", "LASTNAME"}); data.put("2", new Object[] {1, "Amit", "Shukla"}); data.put("3", new Object[] {2, "Lokesh", "Gupta"}); data.put("4", new Object[] {3, "John", "Adwards"}); data.put("5", new Object[] {4, "Brian", "Schultz"}); //Iterate over data and write to sheet Set<String> keyset = data.keySet(); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); Object [] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { Cell cell = row.createCell(cellnum++); if(obj instanceof String) cell.setCellValue((String)obj); else if(obj instanceof Integer) cell.setCellValue((Integer)obj); } } try { //Write the workbook in file system FileOutputStream out = new FileOutputStream(new File("/home/ohelig/eclipse/New Microsoft Office Excel Worksheet.xlsx")); workbook.write(out); out.close(); System.out.println("Write Successfully."); } catch (Exception e) { e.printStackTrace(); } } } ***Update Class: UpdateExcel.java*** import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class UpdateExcel { public static void main(String[] args) { XSSFWorkbook workbook=null; XSSFSheet sheet; try{ FileInputStream file = new FileInputStream(new File("/home/ohelig/eclipse/New Excel Worksheet.xlsx")); //Create Workbook instance holding reference to .xlsx file workbook = new XSSFWorkbook(file); //Get first/desired sheet from the workbook //Most of people make mistake by making new sheet by looking in tutorial sheet = workbook.getSheetAt(workbook.getActiveSheetIndex()); Employee ess = new Employee(6,"Yanish","Pradhananga"); //Get the count in sheet int rowCount = sheet.getLastRowNum()+1; Row empRow = sheet.createRow(rowCount); System.out.println(); Cell c1 = empRow.createCell(0); c1.setCellValue(ess.getId()); Cell c2 = empRow.createCell(1); c2.setCellValue(ess.getFirstName()); Cell c3 = empRow.createCell(2); c3.setCellValue(ess.getLastName()); } catch (Exception e) { e.printStackTrace(); } try { //Write the workbook in file system FileOutputStream out = new FileOutputStream(new File("/home/ohelig/eclipse/New Excel Worksheet.xlsx")); workbook.write(out); out.close(); System.out.println("Update Successfully"); } catch (Exception e) { e.printStackTrace(); } } }