我的Excel工作表包含5行和2列。我想在excel中再添加一列。但是当我使用WorkbookFactory时,它显示错误。我导入了poi-3.8.jar和poi-ooxml-3.5- beta5.jar.It给出错误 线程“main”中的异常java.lang.Error:未解决的编译问题: WorkbookFactory无法解决。请帮我做什么。
答案 0 :(得分:5)
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();
}
}
}
答案 1 :(得分:2)
有关详细信息,请参阅Apache POI Components and Dependencies page。你错过了一些罐子,因此编译错误。
如果你想同时使用HSSF(.xls)和XSSF(.xlsx),我猜你在谈论WorkbookFactory的时候,你需要同时包含主要的POI jar和POI- OOXML jar,以及他们所有的dependencies。使用类路径上的这些jar,您将被排序
另外,你可能想考虑使用像Apache Maven或Apache Ivy这样的东西来处理你的依赖关系,这样你就可以避免丢失像这样的jar问题
答案 2 :(得分:1)
你在使用Maven吗?
如果是,请参阅以下链接的最后评论:
http://apache-poi.1045710.n5.nabble.com/Where-is-WorkbookFactory-td2307412.html
答案 3 :(得分:0)
我上传我的程序供您参考。经过一番努力,我已经克服了这个问题。 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 确保您至少有上述或新的。我包含了进口的详细信息,因此您不需要敲打头。希望你找到它使用
***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();
}
}
}