Как открыть .xlsx файлы с POI SS? - PullRequest
2 голосов
/ 30 апреля 2011

Я пытаюсь открыть файлы .xlsx с POI SS с помощью этого кода (взято из http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook):

InputStream inp = new FileInputStream("workbook.xls");
//InputStream inp = new FileInputStream("workbook.xlsx");

Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.getCell(3);
if (cell == null)
    cell = row.createCell(3);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("a test");

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

и я получаю это сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException

Я добавляю xbean.jar в свою библиотеку и в библиотеки времени выполнения.

как мне разрешить это исключение?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 11 августа 2015

Первый: исправить исключение

Существует два решения:

  1. Как уже упоминал Гаграварр: вам нужен dom4j, чтобы исправить ваше исключение.
  2. Как уже упоминал Джон: вам нужно обновить свои зависимости, чтобы вам больше не нужен dom4j.

Если вы используете Maven, вы можете добавить необходимые зависимости с помощью: (Возможно, проверьте наличие новых версий в: Репозиторий Maven: org.apache.poi )

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

Затем: откройте файл

Если вы исправили исключение, вы можете открыть файл file.xlsx с помощью следующего кода:

String path = "Relative/Path/To/Your/File/file.xlsx";
File file = new File(path);

XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
// Use your sheet ...

Дополнительные советы

  • Как и Гаграварр, я также рекомендую использовать файл вместо потока ввода файла.
  • Если вы хотите открыть определенный лист, вы можете использовать workbook.getSheet(String name);
  • Если вы не знаете относительный путь к вашему файлу в соответствии с вашим проектом, вы можете легко проверить его с помощью System.out.println("Relative path: " + System.getProperty("user.dir"));

С уважением, winklerrr

2 голосов
/ 03 ноября 2012

Я не проанализировал ваше сообщение об ошибке, но, увидев код, я вижу, что что-то не так.
Wookbook не работает с файлами * .xlsx (Office 2007 и более поздние версии). Таким образом, вы должны использовать XSSFWorkbook. Вы можете изменить инициализацию wb на

XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);
2 голосов
/ 30 апреля 2011

Вам нужен dom4j, это то, что говорит вам исключение

Возможно, вы захотите взглянуть на страницу компонентов на веб-сайте POI, где перечислены зависимости

Кроме того, поскольку у вас есть File, откройте непосредственно с этим, не проходите через InputStream. В FAQ по Apache POI есть раздел, посвященный этому , в основном использование файла быстрее и занимает меньше памяти, чем буферизация всего этого через поток!

1 голос
/ 03 декабря 2013

Это может вам помочь.

InputStream is = new FileInputStream(pathOfYourXlsxFile);
                XSSFWorkbook workbook = new XSSFWorkbook(is);
                //Get first sheet from the workbook
                XSSFSheet sheet = workbook.getSheetAt(0);

Для вашего исключения вы должны поместить dom4j.jar в ваш classpath. Вы можете найти его здесь

0 голосов
/ 30 марта 2015

Я понимаю, что ветка старая, но сегодня она привела меня к ответу, который мне нужен для той же проблемы.

Документы на странице, предложенной выше (т.е. включают dom4j.jar), говорят, что больше не нужны:

"JAR-файлы OOXML раньше требовали DOM4J, но теперь код был изменен для использования JAXP, и дополнительные jar-файлы dom4j не требуются."

Я обнаружил, что в том числе и следующее решило проблему:

poi-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
xmlbeans-2.6.0.jar
...