Недавно я увидел в Интернете открытый исходный код, который использует Java для управления Excel. Я попробовал его на weblogic и нашел его очень хорошим. Я хотел бы порекомендовать его всем.
Сначала перейдите по адресу http://www.andykan.com/jexcelapi/index.html, чтобы загрузить последнюю версию JExcelApi, и поместите jxl.jar в свой путь к классам.
Напишите javaBean и используйте JExcelApi для динамического создания документов Excel. Здесь я напишу самый простой и схематический вариант. Если это сложно, вам может потребоваться запросить базу данных или что-то в этом роде.
//////////////////////////////Test.java///////////////// ///// //////////////////////////
пакет com.jagie.test;
импортировать java.io.*;
импортировать jxl.*;
импортировать jxl.write.*;
импортировать jxl.format.*;
импортировать java.util.*;
импортировать java.awt.Color
Test {;
public static void writeExcel(OutputStream os) выдает исключение {
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = new jxl.write.Label(0, 0, «Я люблю Китай»);
ws.addCell(labelC);
jxl.write.WritableFont wfc = новый jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = новый jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, «Китай меня любит»,wcfFC);
ws.addCell(labelC);
//Запись в лист Exel wwb.write();
//Закрываем объект книги Excel wwb.close();
}
//Лучше всего написать такой основной метод, чтобы проверить, хорошо ли написан ваш класс.
public static void main(String[] args) выдает исключение {
Файл f=новый файл("kk.xls");
f.createNewFile();
writeExcel (новый FileOutputStream (f));
}
}
Напишите jsp, чтобы использовать Javabean Test для вывода документов Excel.
/////////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
ответ.сброс();
response.setContentType("application/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
Готово. Вы можете использовать IE для доступа к test_excel.jsp, чтобы открыть динамически созданный документ Excel в IE. Никакой тарабарщины вообще.
Некоторые люди могут спросить: response.reset(); Можно ли опустить это предложение? Я предлагаю его написать, если только вы не можете гарантировать, что в буфере ответа больше ничего нет.
Другие могут спросить: я добавляю < %@page contentType="application/vnd.ms-excel;charset=GBK" %> в начало jsp и удаляю response.setContentType("application/vnd.ms-excel" Is); все в порядке? Ответ на этот вопрос очень прост, просто проверьте код Java, сгенерированный сервером jsp после компиляции jsp. Если он будет изменен на этот, схематический код файла java, сгенерированного моим welogic7 после компиляции test_excel.jsp, будет таким. следующим образом:
public void _jspService(запрос javax.servlet.http.HttpServletRequest,
ответ javax.servlet.http.HttpServletResponse) выдает исключение java.io.IOException,
javax.servlet.ServletException {
// объявляем и устанавливаем известные переменные:
конфигурация javax.servlet.ServletConfig = getServletConfig();
Приложение javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// переменные для протокола расширения тегов
Object page = this;
javax.servlet.jsp.JspWriter вышел;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
запрос, ответ, ноль, правда, 8192, правда)
;
выход = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
try { // блокировка страницы ошибки
response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp; Строка: 6]
ответ.reset(); //[/test_excel.jsp Строка: 7]
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp; Строка: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Строка: 9]
} catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//перед последней закрывающей скобкой...
}
Очевидно, что после блокировки response.setContentType("application/vnd.ms-excel");, перед Test.writeExcel(response.getOutputStream()); и после response.reset(); правильный тип типа содержимого ответа: не установлено, конечно, вывод будет искажен. Скомпилированный исходный код jsp, который правильно выводит Excel, выглядит следующим образом:
public void _jspService(javax.servlet.http.HttpServletRequest request,
ответ javax.servlet.http.HttpServletResponse) выдает исключение java.io.IOException,
javax.servlet.ServletException
{
// объявляем и устанавливаем известные переменные:
конфигурация javax.servlet.ServletConfig = getServletConfig();
Приложение javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// переменные для протокола расширения тегов
Object page = this;
javax.servlet.jsp.JspWriter вышел;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true
out = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
try { // блокировка страницы ошибки
out.print("rn");
//[ /test_excel.jsp; Строка: 2]
response.reset(); //[ /test_excel.jsp Строка: 3]
response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp; Строка: 4]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Строка: 5]
} catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//перед последней закрывающей скобкой...
}
Вы можете видеть, что после response.reset(); и до Test.writeExcel(response.getOutputStream()); содержимое вывода ответа установлено правильно. Так что выход нормальный.
Наконец, я надеюсь, что эта статья вдохновит вас. Если есть какие-либо ошибки, пожалуйста, раскритиковайте и исправьте их!