Разорвать ссылку на внешнюю ссылку в Excel с помощью Apache POIJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Разорвать ссылку на внешнюю ссылку в Excel с помощью Apache POI

Сообщение Anonymous »

Можно ли удалить ссылки на книгу (внешние ссылки) с помощью Apache POI в Java? Я понимаю, что Excel предоставляет возможность вручную разрывать ссылки на внешние книги, но есть ли способ программно идентифицировать и удалять внешние ссылки (формулы или именованные диапазоны, ссылающиеся на другие книги) с помощью Apache POI?

Код: Выделить всё

public static void breakExternalLinks(String inputFilePath, String outputFilePath) throws IOException {
// Load the Excel workbook
FileInputStream fis = new FileInputStream(inputFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(fis);

// Break external links in formulas by replacing them with their current values
breakFormulaLinks(workbook);

// Remove external references in named ranges
removeExternalNamedRanges(workbook);

// Save the updated workbook
FileOutputStream fos = new FileOutputStream(outputFilePath);
workbook.write(fos);

// Close resources
fos.close();
fis.close();
workbook.close();
}

private static void breakFormulaLinks(XSSFWorkbook workbook) {
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.setIgnoreMissingWorkbooks(true); // Ignore missing external workbooks

for (Sheet sheet : workbook) {
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == CellType.FORMULA) {
try {
// Evaluate the formula and replace it with the calculated value
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case BOOLEAN:
cell.setCellValue(cellValue.getBooleanValue());
break;
case NUMERIC:
cell.setCellValue(cellValue.getNumberValue());
break;
case STRING:
cell.setCellValue(cellValue.getStringValue());
break;
case ERROR:
cell.setCellErrorValue(cellValue.getErrorValue());
break;
case BLANK:
cell.setBlank();
break;
}
} catch (Exception e) {
System.out.println("Error evaluating formula in cell " + cell.getAddress() + ": " + e.getMessage());
}
}
}
}
}
}

private static void removeExternalNamedRanges(XSSFWorkbook workbook) {
// Collect all named ranges with external references
List namesToRemove = new ArrayList();

// Iterate over all named ranges in the workbook
for (XSSFName name : workbook.getAllNames()) {
// Check if the name refers to an external workbook (contains a [ symbol)
if (name.getRefersToFormula() != null && name.getRefersToFormula().contains("[")) {
namesToRemove.add(name);
}
}

// Remove all external references from named ranges
for (XSSFName name : namesToRemove) {
workbook.removeName(name);
}
}

Здесь прикреплены изображения, связанные с проблемой.

Подробнее здесь: https://stackoverflow.com/questions/789 ... apache-poi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Пакет org.apache.poi.ss.usermodel доступен из более чем одного модуля: poi, poi.ooxml [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    239 Просмотры
    Последнее сообщение Anonymous
  • Пакет org.apache.poi.ss.usermodel доступен из более чем одного модуля: poi, poi.ooxml [закрыто]
    Anonymous » » в форуме Apache
    0 Ответы
    162 Просмотры
    Последнее сообщение Anonymous
  • Зависимость Apache POI в проекте Maven: java.lang.NoClassDefFoundError: не удалось инициализировать класс org.apache.poi
    Anonymous » » в форуме JAVA
    0 Ответы
    129 Просмотры
    Последнее сообщение Anonymous
  • Apache Poi `4.1.2` Файл PowerPoint Corrupt On Open, работал с Apache Poi` 3.17`
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Apache Poi `4.1.2` Файл PowerPoint Corrupt On Open, работал с Apache Poi` 3.17`
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»