Можно ли удалить ссылки на книгу (внешние ссылки) с помощью 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);
}
}
Здесь прикреплены изображения, связанные с проблемой.
Можно ли удалить ссылки на книгу (внешние ссылки) с помощью Apache POI в Java? Я понимаю, что Excel предоставляет возможность вручную разрывать ссылки на внешние книги, но есть ли способ программно идентифицировать и удалять внешние ссылки (формулы или именованные диапазоны, ссылающиеся на другие книги) с помощью Apache POI? [code]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(); }
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); } }
[/code] Здесь прикреплены изображения, связанные с проблемой.
при открытии программы чтения xlsx возникает ошибка ниже
Пакет org. Апач. пои. SS. Пользовательская модель доступна из более чем одного модуля: poi, poi. oo xml
но при импорте та же проблема сохраняется
я попробовал все решения, представленные на...
при открытии программы чтения xlsx возникает ошибка ниже
Пакет org. Апач. пои. SS. Пользовательская модель доступна из более чем одного модуля: poi, poi. oo xml
но при импорте та же проблема сохраняется
я попробовал все решения, представленные на...
Я хочу экспортировать файл xlsx в проект Java, поэтому добавил библиотеки Apache POI. Однако это не работает. Я удалил зависимость xerces, и она работает, но при попытке экспорта в формат PDF возникает ошибка в существующих функциях. Я делюсь с вами...
Я генерирую файл PowerPoint, используя версию Apache POI 4.1.2 . Файл создается без каких -либо ошибок во время выполнения, но когда я пытаюсь открыть его в PowerPoint, я получаю следующее сообщение об ошибке:
PowerPoint found a problem with...
Я генерирую файл PowerPoint, используя версию Apache POI 4.1.2 . Файл создается без каких -либо ошибок во время выполнения, но когда я пытаюсь открыть его в PowerPoint, я получаю следующее сообщение об ошибке:
PowerPoint found a problem with...