لقد رأيت مؤخرًا مصدرًا مفتوحًا على الإنترنت يستخدم Java للتحكم في Excel، وقد جربته على weblogic ووجدته جيدًا جدًا وأود أن أوصي به للجميع.
انتقل أولاً إلى http://www.andykhan.com/jexcelapi/index.html لتنزيل أحدث إصدار من JExcelApi ووضع jxl.jar في مسار الفصل الدراسي الخاص بك.
اكتب javaBean واستخدم JExcelApi لإنشاء مستندات Excel ديناميكيًا، وسأكتب أبسطها وتخطيطيًا هنا. إذا كان الأمر معقدًا، فقد تحتاج إلى الاستعلام عن قاعدة البيانات أو شيء من هذا القبيل.
//////////////////////Test.java////////////////////////////////////////// ///// ////////////////////////
package com.jagie.test;
استيراد java.io.*;
استيراد jxl.*;
import jxl.write.*;
استيراد jxl.format.*;
import java.util.*;
استيراد java.awt.Color
اختبار الطبقة العامة {
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, خطأ,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, "China love me",wcfFC);
ws.addCell(labelC);
// الكتابة إلى ورقة عمل Exel wwb.write();
// أغلق كائن مصنف Excel wwb. Close();
}
// من الأفضل أن تكتب طريقة رئيسية كهذه لاختبار ما إذا كان فصلك مكتوبًا بشكل جيد أم لا.
public static void main(String[] args)throws Exception{
الملف f=new File("kk.xls");
f.createNewFile();
writeExcel(new FileOutputStream(f));
}
}
اكتب jsp لاستخدام اختبار Javabean لإخراج مستندات Excel.
/////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
Response.reset();
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" ); حسنًا؟ الإجابة على هذا السؤال بسيطة للغاية، ما عليك سوى التحقق من كود Java الذي تم إنشاؤه بواسطة خادم jsp بعد تجميع jsp. إذا تم تغييره إلى هذا، فإن الكود التخطيطي لملف Java الذي تم إنشاؤه بواسطة welogic7 بعد تجميع test_excel.jsp هو. كما يلي:
طلب الفراغ العام _jspService(javax.servlet.http.HttpServletRequest،
استجابة javax.servlet.http.HttpServletResponse) تطرح java.io.IOException،
javax.servlet.ServletException {
// الإعلان عن المتغيرات المعروفة وتعيينها:
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// متغيرات بروتوكول ملحق العلامة
Object page = this;
javax.servlet.jsp.JspWriter out;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
طلب، استجابة، فارغة، صحيح، 8192، صحيح)؛
Response.setHeader("Content-Type"، "application/vnd.ms-excel; charset=GBK");
خارج = pageContext.getOut();
JspWriter _originalOut = out;
(
true);
Response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp؛ السطر: 6]
Response.reset(); //[ /test_excel.jsp;
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp؛ السطر: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} قبض (قابل للرمي __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 config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// متغيرات بروتوكول ملحق العلامة
Object page = this;
javax.servlet.jsp.JspWriter out;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, Response, null, true, 8192, true
out =pageContext.getOut();
JspWriter _originalOut = out;
(
true);
out.print("rn");
//[ /test_excel.jsp؛ السطر: 2]
Response.reset(); //[ /test_excel.jsp;
Response.setContentType("application/vnd.ms-excel"); //[/test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} قبض (قابل للرمي __ee) {
while (out != null && out != _originalOut) out =pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
// قبل قوس الإغلاق الأخير ...
}
يمكنك أن ترى أنه بعد Response.reset(); وقبل Test.writeExcel(response.getOutputStream()); تم تعيين محتوى إخراج الاستجابة بشكل صحيح. وبالتالي فإن الإخراج طبيعي.
أخيرًا، آمل أن يلهمك هذا المقال إذا كان هناك أي أخطاء، يرجى انتقادها وتصحيحها!