а чем вам POI не угодил для xlsx? Раз уж вы используету POI-HSSF для генерации xlx, используйте POI-XSSF для xslx. У этих модулей общие интерфейсы, так что код будет один и тот же.
В XSSF тоже можно ковыряться в низкоуровневом XML если уж вам этого хочется.
Кроме того, в POI есть модуль SXSSF (S спереди означает streaming). В HSSF и XSSF модель документа строится в памяти и в случае больших репортов получаются довольно развесистые структуры которые жрут память. В SXSSF данные пишутся сразу в файл. Часть функциональности при этом теряется, зато объем памяти практически константый.
Согласен, GSoC — это отличная возможность отметиться в OpenSource.
В этом году метаться уже поздно — GSoC-2012 уже идет и прием заявок закрыт. Если вы студент и хотите поучаствовать в GSoC-2013, то ищите себе OpenSource проект, осваивайтесь в нем, зарабатывайте карму и в Марте 2013 подавайте заявку. Кандидаты с опытом участия в OpenSource имеют существенно выше шансы отобраться.
есть способ попроще: ClassLoader хранит список загруженных классов в приватной переменной classes:
// The classes loaded by this class loader. The only purpose of this table
// is to keep the classes from being GC'ed until the loader is GC'ed.
private final Vector<Class<?>> classes = new Vector<>();
к ней можно достучаться через reflection и посмотреть что загружено. Примерно так:
// get access to the private variable ClassLoader.classes
Field fld = ClassLoader.class.getDeclaredField("classes");
fld.setAccessible(true);
// list classes loaded by the application class loader
ClassLoader appLoader = MyApp.class.getClassLoader();
Vector<Class<?>> classes = (Vector<Class<?>>) fld.get(appLoader);
Map<String, Class<?>> map = new HashMap<String, Class<?>>();
for (Class<?> cls : classes) {
System.out.println(cls);
}
можно сгруппировать загруженные классы по джарам:
// classes groupped by jar
Map<String, Collection<Class> > classesByJar = new HashMap<String, Collection<Class>>();
for(Class clz : loadedClasses){
String jarLocation = clz.getProtectionDomain().getCodeSource().getLocation().toString();
Collection<Class> jarClasses = classesByJar.get(jarLocation );
if(jarClasses == null) {
jarClasses = new ArrayList<Class>();
classesByJar.put(jarLocation, jarClasses);
}
jarClasses.add(clz);
}
если загрузчик классов иерархический, то бежим по цепочке и выводим список для каждого звена.
как-то так.
Ну здрасте! API один и тот же и есть две реализации для .xls и .xlsx форматов.
Посмотрите примеры: poi.apache.org/spreadsheet/quick-guide.html
в большинстве случаев используются унифицированные интерфейсы.
спасибо, убрал.
Имя хаба Apache вводит в заблуждение. В стародавние времена имя Apache прочно ассоциировалось с httpd, но сейчас это далеко не так. Apache крышует десятки проектов на разных языках и платформах и httpd лишь один из них.
а сколько весит ooxml.jar с биньями только для XSLX? По идее должен быть около 30% от исходного.
Стандартный воркэраунд в XSSF — это создать шаблон с графиком а данные заливать через API.
В XSSF тоже можно ковыряться в низкоуровневом XML если уж вам этого хочется.
Кроме того, в POI есть модуль SXSSF (S спереди означает streaming). В HSSF и XSSF модель документа строится в памяти и в случае больших репортов получаются довольно развесистые структуры которые жрут память. В SXSSF данные пишутся сразу в файл. Часть функциональности при этом теряется, зато объем памяти практически константый.
В этом году метаться уже поздно — GSoC-2012 уже идет и прием заявок закрыт. Если вы студент и хотите поучаствовать в GSoC-2013, то ищите себе OpenSource проект, осваивайтесь в нем, зарабатывайте карму и в Марте 2013 подавайте заявку. Кандидаты с опытом участия в OpenSource имеют существенно выше шансы отобраться.
к ней можно достучаться через reflection и посмотреть что загружено. Примерно так:
можно сгруппировать загруженные классы по джарам:
если загрузчик классов иерархический, то бежим по цепочке и выводим список для каждого звена.
как-то так.
Посмотрите примеры: poi.apache.org/spreadsheet/quick-guide.html
в большинстве случаев используются унифицированные интерфейсы.
вот еще несколько более сложных примеров: poi.apache.org/spreadsheet/examples.html
везде используются общие интерфейсы.
читайте, батенька, доку.
Имя хаба Apache вводит в заблуждение. В стародавние времена имя Apache прочно ассоциировалось с httpd, но сейчас это далеко не так. Apache крышует десятки проектов на разных языках и платформах и httpd лишь один из них.