我的 excel 表包含 5 行和 2 列。我想在该 excel 中再添加一列。但是当我使用 WorkbookFactory 时,它显示错误。我导入了 poi-3.8.jar 和 poi-ooxml-3.5-beta5.jar .它在线程“main”java.lang.Error中给出错误异常:未解决的编译问题:无法解决WorkbookFactory。请帮我做什么。
问问题
44015 次
4 回答
10
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();
}
}
}
于 2013-03-18T09:43:45.023 回答
2
有关详细信息,请参阅Apache POI 组件和依赖项页面。您缺少一些罐子,因此出现编译错误。
如果您想同时使用 HSSF (.xls) 和 XSSF (.xlsx),我猜您在谈论 WorkbookFactory 时会这样做,您需要同时包含主 POI jar 和 POI-OOXML jar,加上他们所有的依赖。使用类路径中的这些 jar,您将被排序
此外,您可能想考虑使用 Apache Maven 或 Apache Ivy 之类的东西来为您处理依赖项,这样您就可以避免像这样的丢失 jar 问题
于 2013-03-18T10:23:35.727 回答
1
你在使用 Maven 吗?
如果是,请参阅以下链接中的最后一条评论:
http://apache-poi.1045710.n5.nabble.com/Where-is-WorkbookFactory-td2307412.html
于 2013-03-18T07:28:19.030 回答
0
我正在上传我的程序供您参考。经过一番努力,我已经克服了这个问题。罐子详细信息: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();
}
}
}
于 2017-07-26T20:22:52.623 回答