Как открыть, сохранить и закрыть файл Excell Macro-Enabled Worksheet с Java? - PullRequest
0 голосов
/ 18 октября 2019

Причина :

Для обновления каждого результата формулы в существующий файл Excell.

Почему :

Комуиметь возможность извлекать самую актуальную информацию из файла Excell, так как в противном случае программа отображает только результат, который был сохранен вручную в последний раз, когда был открыт файл Excell.

Цель :

Пожалуйста, кто-нибудь может привести пример того, как выполнить это действие:
Open -> Save -> Close
Позволяет назвать этот Excell File: Test.xlsm

Решение :

В конце я нашел удивительное решение для моей проблемы. Вероятно, лучше, чем Apache, так как в моем xlsm-файле было много пользовательских формул , что приводило к любым попыткам оценки формул с помощью Apache для создания ошибок и сбоев.

Я создал сценарий VBS, написанный в файле .vbs.

Set x_Application = CreateObject("Excel.Application")
Set x_Open_application = x_application.Workbooks.Open("C:\User\Documents\Project\Test.xlsm")
x_application.Calculate
x_Open_application.Save
x_Open_application.Close False

Этот скрипт будет открыт / выполнен в любое время, прежде чем я начну извлекать информацию из моего файла xlsm. Это гарантирует, что результаты всех формул в xlsm будут актуальными .

Мои функции Java открывают / запускают файл VBS Script перед извлечением информации:

Desktop.getDesktop().open(new File("./" + VBS_File_Name + ".vbs")); //Run VBS File

Преимущества этого метода:

* Формулы файла Excel, обновленные / обновленные с помощью этого метода, не будут видны пользователю - работа выполняется в фоновом режиме.

* Работает на 100% без Apache.

* Простота реализации.

1 Ответ

0 голосов
/ 20 октября 2019

Это базовая демонстрация чтения файла Excel с POI. Аргументом является имя файла Excel.


import java.io.*;

import org.apache.poi.ss.usermodel.*;

public class PoiDemo {

    public static void main(final String[] args) {

        try (FileInputStream inputStream = new FileInputStream(args[0]);
                BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
                Workbook workbook = WorkbookFactory.create(bufferedInputStream);) {

            final Sheet sheet = workbook.getSheetAt(0);

            for (final Row row : sheet) {
                final String col0 = valueAsString(row, 0);
                final String col2 = valueAsString(row, 2);
                System.out.println("Column 0 =" + col0 + " column 2 = " + col2);
            }
        } catch (final Exception e) {
            throw new IllegalStateException("Exception processing excel input", e);
        }
    }

    private static String valueAsString(final Row row, final int i) {
        final Cell cell = row.getCell(i);
        final CellType ct = cell.getCellType();
        switch (ct) {
        case BOOLEAN:
            return cell.getBooleanCellValue() ? "1" : "0";
        case NUMERIC:
            return String.format("%.0f", cell.getNumericCellValue());
        case FORMULA:
        case STRING:
            return cell.getStringCellValue().trim();
        default:
        }

        return "";
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...