Пример сбора имен диапазонов из электронной таблицы, чтобы их можно было сравнить для отчета "diff" ...
Например, вот электронная таблица с двумя именованными диапазонами:
Name : animals
Refers to: Sheet1!$C$3:$D$4,Sheet1!$C$5
Name : birds
Refers to: Sheet1!$B$8:$B$9
Следующий код заполняет имена диапазонов и ссылки на карту:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Name;
...
public Map<String, String> compare(String fileName) {
Map<String, String> namesMap = new HashMap();
File file = new File(fileName);
try (InputStream is = new FileInputStream(file)) {
Workbook wb = WorkbookFactory.create(is);
List<? extends Name> names = wb.getAllNames();
names.forEach((name) -> {
namesMap.put(name.getNameName(), name.getRefersToFormula());
});
} catch (FileNotFoundException ex) {
// handler
} catch (IOException ex) {
// handler
}
return namesMap;
}
Теперь вы можете повторить это для каждого из двух файлов Excel, а затем сравните ключи и значения в двух объектах карты (разные имена диапазонов; одинаковые имена, но разные диапазоны ячеек).
ОБНОВЛЕНИЕ : образец выше был написанный с использованием Open JDK 13. Были использованы следующие зависимости POI (при условии Maven):
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>