4

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

4

4 回答 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 回答