﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-问天的博客</title><link>http://www.blogjava.net/sunnyliu/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 22 Aug 2008 01:18:13 GMT</lastBuildDate><pubDate>Fri, 22 Aug 2008 01:18:13 GMT</pubDate><ttl>60</ttl><item><title>利用存储过程实现oracle的分页查询</title><link>http://www.blogjava.net/sunnyliu/archive/2008/07/01/211829.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Tue, 01 Jul 2008 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2008/07/01/211829.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/211829.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2008/07/01/211829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/211829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/211829.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle 分页查询&nbsp;&nbsp;<a href='http://www.blogjava.net/sunnyliu/archive/2008/07/01/211829.html'>阅读全文</a><img src ="http://www.blogjava.net/sunnyliu/aggbug/211829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2008-07-01 10:19 <a href="http://www.blogjava.net/sunnyliu/archive/2008/07/01/211829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作Linux系统　必学的60个命令</title><link>http://www.blogjava.net/sunnyliu/archive/2007/10/24/linux.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Wed, 24 Oct 2007 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2007/10/24/linux.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/155608.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2007/10/24/linux.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/155608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/155608.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 操作Linux系统　必学的60个命令&nbsp;&nbsp;<a href='http://www.blogjava.net/sunnyliu/archive/2007/10/24/linux.html'>阅读全文</a><img src ="http://www.blogjava.net/sunnyliu/aggbug/155608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2007-10-24 15:38 <a href="http://www.blogjava.net/sunnyliu/archive/2007/10/24/linux.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MD5算法在java中的实现类</title><link>http://www.blogjava.net/sunnyliu/archive/2007/09/18/146120.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Tue, 18 Sep 2007 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2007/09/18/146120.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/146120.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2007/09/18/146120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/146120.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/146120.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MD5算法java实现类&nbsp;&nbsp;<a href='http://www.blogjava.net/sunnyliu/archive/2007/09/18/146120.html'>阅读全文</a><img src ="http://www.blogjava.net/sunnyliu/aggbug/146120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2007-09-18 12:17 <a href="http://www.blogjava.net/sunnyliu/archive/2007/09/18/146120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Java实现zip压缩解压缩(转)</title><link>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126348.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Tue, 26 Jun 2007 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126348.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/126348.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/126348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/126348.html</trackback:ping><description><![CDATA[<p>由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节省服务器的外存空间。Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 <br>　　zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据。 </p>
<p>　　与zip文件有关的几个Java类 </p>
<p>　　&#183;类ZipEntry </p>
<p>　　public ZipEntry(String name); </p>
<p>　　name为指定的数据项名。 </p>
<p>　　&#183;类ZipOutputStream </p>
<p>　　ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非</p>
<p>　　public ZipOutputStream(OutputStream out); </p>
<p>　　∥利用输出流out构造一个ZIP输出流。 </p>
<p>　　public void setMethod(int method); </p>
<p>　　∥设置entry压缩方法,缺省值为DEFLATED。 </p>
<p>　　public void putNextEntry(ZipEntry newe); </p>
<p>　　∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件<br>中写入新的entry-newe </p>
<p>并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指<br>定的方法。 </p>
<p>　　&#183;类ZipInputStream </p>
<p>　　ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非<br>压缩entry。下面是它的 </p>
<p>几个函数: </p>
<p>　　public ZipInputStream(InputStream in); </p>
<p>　　∥利用输入流in构造一个ZIP输出流。 </p>
<p>　　public ZipEntry getNextEntry(); </p>
<p>　　∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。 </p>
<p>　　public void closeEntry(); </p>
<p>　　∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。 </p>
<p>　　程序代码及其注释 </p>
<p>　　下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数将随机生成的数据存到ZIP格式的压缩文件中。 </p>
<p>　　import java.util.zip.*; </p>
<p>　　import java.awt.event.*; </p>
<p>　　import java.awt.*; </p>
<p>　　import java.lang.Math; </p>
<p>　　import java.io.*; </p>
<p>　　public class TestZip extends Frame implements <br>ActionListener { </p>
<p>　　TextArea textarea; ∥显示数据文件的多行文本显示域 </p>
<p>　　TextField infotip; ∥显示数据文件未压缩大小及压缩大小单<br>行文本显示域 </p>
<p>　　String doc; ∥存储随机生成的数据 </p>
<p>　　long doczipsize = 0;∥压缩数据文件的大小 </p>
<p>　　public TestZip(){ </p>
<p>　　∥生成菜单 </p>
<p>　　MenuBar menubar = new MenuBar(); </p>
<p>　　setMenuBar(menubar); </p>
<p>　　Menu file = new Menu("File",true); </p>
<p>　　menubar.add(file); </p>
<p>　　MenuItem neww= new MenuItem("New"); </p>
<p>　　neww.addActionListener(this); </p>
<p>　　file.add(neww); </p>
<p>　　MenuItem open=new MenuItem("Open"); </p>
<p>　　open.addActionListener(this); </p>
<p>　　file.add(open); </p>
<p>　　MenuItem save=new MenuItem("Save"); </p>
<p>　　save.addActionListener(this); </p>
<p>　　file.add(save); </p>
<p>　　MenuItem exit=new MenuItem("Exit"); </p>
<p>　　exit.addActionListener(this); </p>
<p>　　file.add(exit); </p>
<p>　　∥随机生成的数据文件的多行文本显示域 </p>
<p>　　add("Center",textarea = new TextArea()); </p>
<p>　　∥提示文本原始大小、压缩大小的单行文本显示域 </p>
<p>　　add("South",infotip = new TextField()); </p>
<p>　　} </p>
<p>　　public static void main(String args[]){ </p>
<p>　　TestZip ok=new TestZip(); </p>
<p>　　ok.setTitle("zip sample"); </p>
<p>　　ok.setSize(600,300); </p>
<p>　　ok.show(); </p>
<p>　　} </p>
<p>　　private void randomData(){ </p>
<p>　　∥随机生成50个double数据,并放在doc字符串变量中。 </p>
<p>　　doc=""; </p>
<p>　　for(int i=1;i&amp;lt;51;i++){ </p>
<p>　　 double rdm=Math.random()*10; </p>
<p>　　 doc=doc+new Double(rdm).toString(); </p>
<p>　　 if(i%5 == 0) doc=doc+"\n"; </p>
<p>　　 else doc=doc+" "; </p>
<p>　　} </p>
<p>　　doczipsize = 0; </p>
<p>　　showTextandInfo(); </p>
<p>　　} </p>
<p>　　private void openFile(){ </p>
<p>　　∥打开zip文件,将文件内容读入doc字符串变量中。 </p>
<p>　　FileDialog dlg=new <br>FileDialog(this,"Open",FileDialog.LOA D); </p>
<p>　　dlg.show(); </p>
<p>　　String filename=dlg.getDirectory()+dlg.getFile(); </p>
<p>　　try{ </p>
<p>　　∥创建一个文件实例 </p>
<p>　　File f=new File(filename); </p>
<p>　　if(!f.exists()) return; ∥文件不存在,则返回 </p>
<p>　　∥用文件输入流构建ZIP压缩输入流 </p>
<p>　　ZipInputStream zipis=new ZipInputStream(new <br>FileInputStream(f)); </p>
<p>　　zipis.getNextEntry(); </p>
<p>　　∥将输入流定位在当前entry数据项位置 </p>
<p>　　DataInputStream dis=new DataInputStream(zipis); </p>
<p>　　∥用ZIP输入流构建DataInputStream </p>
<p>　　doc=dis.readUTF();∥读取文件内容 </p>
<p>　　dis.close();∥关闭文件 </p>
<p>　　doczipsize = f.length();∥获取ZIP文件长度 </p>
<p>　　showTextandInfo();∥显示数据 </p>
<p>　　} </p>
<p>　　catch(IOException ioe){ </p>
<p>　　System.out.println(ioe); </p>
<p>　　} </p>
<p>　　} </p>
<p>　　private void saveFile(){ </p>
<p>　　∥打开zip文件,将doc字符串变量写入zip文件中。 </p>
<p>　　FileDialog dlg=new <br>FileDialog(this,"Save",FileDialog.SAVE); </p>
<p>　　dlg.show(); </p>
<p>　　String filename=dlg.getDirectory()+dlg.getFile(); </p>
<p>　　try{ </p>
<p>　　∥创建一个文件实例 </p>
<p>　　File f=new File(filename); </p>
<p>　　if(!f.exists()) return; ∥文件不存在,则返回 </p>
<p>　　∥用文件输出流构建ZIP压缩输出流 </p>
<p>　　ZipOutputStream zipos=new ZipOutputStream(new <br>FileOutputStream(f)); </p>
<p>　　zipos.setMethod(ZipOutputStream.DEFLATED); ∥设置压缩方<br>法 </p>
<p>　　zipos.putNextEntry(new ZipEntry("zip")); </p>
<p>　　∥生成一个ZIP entry,写入文件输出流中,并将输出流定位于<br>entry起始处。 </p>
<p>　　DataOutputStream os=new DataOutputStream(zipos); </p>
<p>　　∥用ZIP输出流构建DataOutputStream; </p>
<p>　　os.writeUTF(doc);∥将随机生成的数据写入文件中 </p>
<p>　　os.close();∥关闭数据流 </p>
<p>　　doczipsize = f.length(); </p>
<p>　　∥获取压缩文件的长度 </p>
<p>　　showTextandInfo();∥显示数据 </p>
<p>　　} </p>
<p>　　catch(IOException ioe){ </p>
<p>　　System.out.println(ioe); </p>
<p>　　} </p>
<p>　　} </p>
<p>　　private void showTextandInfo(){ </p>
<p>　　∥显示数据文件和压缩信息 </p>
<p>　　<br>textarea.replaceRange(doc,0,textarea.getText().length()); </p>
<p>　　infotip.setText("uncompressed size: <br>"+doc.length()+"compressed size: "+dc zipsize); </p>
<p>　　} </p>
<p>　　public void actionPerformed(ActionEvent e){ </p>
<p>　　String arg = e.getActionCommand(); </p>
<p>　　if ("New".equals(arg)) randomData(); </p>
<p>　　else if ("Open".equals(arg)) openFile(); </p>
<p>　　else if ("Save".equals(arg)) saveFile(); </p>
<p>　　else if ("Exit".equals(arg)){ </p>
<p>　　 dispose();∥关闭窗口 </p>
<p>　　 System.exit(0);∥关闭程序 </p>
<p>　　} </p>
<p>　　else { </p>
<p>　　 System.out.println("no this command!"); </p>
<p>　　} </p>
<p>　　} </p>
<p>　　} </p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/sunnyliu/aggbug/126348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2007-06-26 15:13 <a href="http://www.blogjava.net/sunnyliu/archive/2007/06/26/126348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java操作Excel电子表格(转)</title><link>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126347.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Tue, 26 Jun 2007 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126347.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/126347.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2007/06/26/126347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/126347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/126347.html</trackback:ping><description><![CDATA[<p>阅读提示：只要有表格，就会有Microsoft Excel，用Microsoft Excel处理数据已成为不少人的习惯。Jakarta POI API就为Java程序员提供了一条存取Microsoft文档格式的神奇之路，其中最成熟的就是能存取Microsoft Excel文档的HSSF API。本篇文章就举例示范如何利用Java 创建和读取Excel文档，并设置单元格的字体和格式。<br>只要有表格，就会有Microsoft Excel，用Microsoft Excel处理数据已成为不少人的习惯。Jakarta POI API就为Java程序员提供了一条存取Microsoft文档格式的神奇之路，其中最成熟的就是能存取Microsoft Excel文档的HSSF API。</p>
<p>本篇文章就举例示范如何利用Java 创建和读取Excel文档，并设置单元格的字体和格式。</p>
<p>为了保证示例程序的运行，必须安装Java 2 sdk1.4.0 和Jakarta POI，Jakarta POI的Web站点是: <a href="http://jakarta.apache.org/poi/">http://jakarta.apache.org/poi/</a></p>
<p>创建Excel 文档</p>
<p>示例1将演示如何利用Jakarta POI API 创建Excel 文档。&nbsp; </p>
<p>示例1程序如下：</p>
<p>import org.apache.poi.hssf.usermodel.HSSFWorkbook;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFSheet;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFRow;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFCell;</p>
<p>import java.io.FileOutputStream;</p>
<p>public class CreateXL {</p>
<p>　/** Excel 文件要存放的位置，假定在D盘JTest目录下*/</p>
<p>　public static String outputFile="D:/JTest/ gongye.xls";</p>
<p>　public static void main(String argv[]){</p>
<p>　try{</p>
<p>// 创建新的Excel 工作簿</p>
<p>HSSFWorkbook workbook = new HSSFWorkbook();</p>
<p>// 在Excel工作簿中建一工作表，其名为缺省值</p>
<p>// 如要新建一名为"效益指标"的工作表，其语句为：</p>
<p>// HSSFSheet sheet = workbook.createSheet("效益指标");</p>
<p>HSSFSheet sheet = workbook.createSheet();</p>
<p>// 在索引0的位置创建行（最顶端的行）</p>
<p>HSSFRow row = sheet.createRow((short)0);</p>
<p>//在索引0的位置创建单元格（左上端）</p>
<p>HSSFCell cell = row.createCell((short) 0);</p>
<p>// 定义单元格为字符串类型</p>
<p>cell.setCellType(HSSFCell.CELL_TYPE_STRING);</p>
<p>// 在单元格中输入一些内容</p>
<p>cell.setCellValue("增加值");</p>
<p>// 新建一输出文件流</p>
<p>FileOutputStream fOut = new FileOutputStream(outputFile);</p>
<p>// 把相应的Excel 工作簿存盘</p>
<p>workbook.write(fOut);</p>
<p>fOut.flush();</p>
<p>// 操作结束，关闭文件</p>
<p>fOut.close();</p>
<p>System.out.println("文件生成...");</p>
<p>　}catch(Exception e) {</p>
<p>System.out.println("已运行 xlCreate() : " + e );</p>
<p>　}</p>
<p>}</p>
<p>}</p>
<p>读取Excel文档中的数据</p>
<p>示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为gongye.xls的Excel文件。</p>
<p>示例2程序如下：</p>
<p>import org.apache.poi.hssf.usermodel.HSSFWorkbook;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFSheet;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFRow;</p>
<p>import org.apache.poi.hssf.usermodel.HSSFCell;</p>
<p>import java.io.FileInputStream;</p>
<p>public class ReadXL {</p>
<p>　/** Excel文件的存放位置。注意是正斜线*/</p>
<p>　public static String fileToBeRead="D:/JTest/ gongye.xls";</p>
<p>　public static void main(String argv[]){</p>
<p>　try{</p>
<p>// 创建对Excel工作簿文件的引用</p>
<p>HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));</p>
<p>// 创建对工作表的引用。</p>
<p>// 本例是按名引用（让我们假定那张表有着缺省名"Sheet1"）</p>
<p>HSSFSheet sheet = workbook.getSheet("Sheet1");</p>
<p>// 也可用getSheetAt(int index)按索引引用，</p>
<p>// 在Excel文档中，第一张工作表的缺省索引是0，</p>
<p>// 其语句为：HSSFSheet sheet = workbook.getSheetAt(0);</p>
<p>// 读取左上端单元</p>
<p>HSSFRow row = sheet.getRow(0);</p>
<p>HSSFCell cell = row.getCell((short)0);</p>
<p>// 输出单元内容，cell.getStringCellValue()就是取所在单元的值</p>
<p>System.out.println("左上端单元是： " + cell.getStringCellValue());</p>
<p>　}catch(Exception e) {</p>
<p>System.out.println("已运行xlRead() : " + e );</p>
<p>　}</p>
<p>}</p>
<p>}</p>
<p>设置单元格格式</p>
<p>在这里，我们将只介绍一些和格式设置有关的语句，我们假定workbook就是对一个工作簿的引用。在Java中，第一步要做的就是创建和设置字体和单元格的格式，然后再应用这些格式：</p>
<p>1、创建字体，设置其为红色、粗体：</p>
<p>HSSFFont font = workbook.createFont();</p>
<p>font.setColor(HSSFFont.COLOR_RED);</p>
<p>font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);</p>
<p>2、创建格式</p>
<p>HSSFCellStyle cellStyle= workbook.createCellStyle();</p>
<p>cellStyle.setFont(font);</p>
<p>3、应用格式</p>
<p>HSSFCell cell = row.createCell((short) 0);</p>
<p>cell.setCellStyle(cellStyle);</p>
<p>cell.setCellType(HSSFCell.CELL_TYPE_STRING);</p>
<p>cell.setCellValue("标题 ");</p>
<img src ="http://www.blogjava.net/sunnyliu/aggbug/126347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2007-06-26 15:10 <a href="http://www.blogjava.net/sunnyliu/archive/2007/06/26/126347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cell插件在Web开发中的应用</title><link>http://www.blogjava.net/sunnyliu/archive/2007/05/28/120437.html</link><dc:creator>sunnyliu</dc:creator><author>sunnyliu</author><pubDate>Mon, 28 May 2007 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/sunnyliu/archive/2007/05/28/120437.html</guid><wfw:comment>http://www.blogjava.net/sunnyliu/comments/120437.html</wfw:comment><comments>http://www.blogjava.net/sunnyliu/archive/2007/05/28/120437.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sunnyliu/comments/commentRss/120437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunnyliu/services/trackbacks/120437.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p align=left><strong><span>一．用<span>Cell插件实现Java界面的打印简介</span></span></strong></p>
<p align=left><span>(1) 在HTML页面上嵌入华表的Cell插件；</span></p>
<p align=left><span>为了在<span>Applet界面中调用华表的Cell插件，我们首先在HTML页面上隐藏了一个Cell插件：</span></span></p>
<p align=left><span>&amp;ltOBJECT id=c style="LEFT: 0px; WIDTH: 828px; TOP: 0px; HEIGHT: 509px" </span></p>
<p align=left><span>classid="clsid:3F166327-8030-4881-8BD2-EA25350E574A" VIEWASTEXT&gt;</span></p>
<p align=left><span>&amp;ltPARAM NAME="_Version" VALUE="65536"&gt;</span></p>
<p align=left><span>&amp;ltPARAM NAME="_ExtentX" VALUE="17526"&gt;</span></p>
<p align=left><span>&amp;ltPARAM NAME="_ExtentY" VALUE="10774"&gt;</span></p>
<p align=left><span>&amp;ltPARAM NAME="_StockProps" VALUE="0"&gt;&lt;/OBJECT&gt;</span></p>
<p align=left><span><br><span>通过style="HEIGHT: 0px; WIDTH: 0px"指定Cell插件的高度和宽度都为0，从而达到隐藏Cell插件的目的</span>。</span></p>
<p align=left><span>(2) 在Applet中提供两个调用接口方法；</span></p>
<p align=left><span>下面是一个<span>Applet的代码实例，其中提供了<span>callCellMethod()</span>和<span>callJavaScriptMethod()</span>两个接口方法，分别可用来调用Cell插件的方法和JavaScript的方法：</span></span></p>
<p align=left><span>public class MyApplet extends javax.swing.JApplet {</span></p>
<p align=left><span>private JSObject win = null;</span></p>
<p align=left><span>private JSObject cell = null;</span></p>
<p align=left><span>public Object callCellMethod(String name, Object[] params) {</span></p>
<p align=left><span>return getCell().call(name, params);}</span></p>
<p align=left><span>public Object callJavaScript(String name, Object[] params) {</span></p>
<p align=left><span>return getJSwin().call(name, params);}</span></p>
<p align=left><span>private JSObject getCell() {</span></p>
<p align=left><span>if (cell == null) {</span></p>
<p align=left><span>try {</span></p>
<p align=left><span>JSObject doc = (JSObject)getJSwin().getMember("document");</span></p>
<p align=left><span>JSObject all = (JSObject)doc.getMember("all");</span></p>
<p align=left><span>cell = (JSObject)all.call("item", new Object[]{"DCellWeb1"});}</span></p>
<p align=left><span>catch (Exception e) {</span></p>
<p align=left><span>e.printStackTrace();} }</span></p>
<p align=left><span>return cell;}</span></p>
<p align=left><span>private netscape.javascript.JSObject getJSwin() {</span></p>
<p align=left><span>if (win == null) {</span></p>
<p align=left><span>win = netscape.javascript.JSObject.getWindow(this);}</span></p>
<p align=left><span>return win;}}</span></p>
<p align=left><span>通过<span>getCell()这个方法，可以在Java Applet中直接获得用JSObject表示的Cell插件，从而可以直接调用它的方法。例如，在Java Applet中向Cell插件的一个单元格写入数据，可以如下调用</span></span><span>：</span></p>
<p align=left><span>Integer row = new Integer(1);</span></p>
<p align=left><span>Integer column = new Integer(1);</span></p>
<p align=left><span>Integer page = new Integer(0);</span></p>
<p align=left><span>callCellMethod("SetCellString", new Object[]{column, row, page, &#8220;str&#8221;});</span></p>
<p align=left><span>其中<span>SetCellString是Cell插件提供的接口方法。这样就实现了从Java Applet到华表的Cell插件的调用。</span></span></p>
<p align=left><strong><span>二．<span>Cell插件如何实现客户端与服务端的数据交换：</span></span></strong></p>
<p align=left><span>(1)<strong> </strong><span>添加CELL插件至网页中:</span></span></p>
<p align=left><span>具体方法请参阅一</span></p>
<p align=left><span>(2)<strong> </strong>从服务器端读取数据:</span></p>
<p align=left></p>
<p align=left><span>A.<span>&nbsp;&nbsp;&nbsp; </span></span><span>打开报表模板<span>:</span></span></p>
<p align=left><span>在这里之所以在请求<span>XML数据前要先有打开报表模板，是因为如果将报表样式都存放在XML数据中，势必会增加XML数据量，一方面影响网页的运行速度；另一方面，一旦更改报表样式后，就得修改程序代码，从而增加程序开发和代码维护的工作量；而在模板中存放报表格式，查询报表时先打开模板，上传数据和下传数 据时只需传送实际的报表数据，从而大大减少传送数据量和工作量；模板文件可以通过外部程序（可以使用CELL自带的报表设计器）设计，模板文件存放至服务器端的某个虚拟目录下，使用CELL的OpenFile方法打开，文件路径可以是相对路径。</span></span></p>
<p align=left><span>B.<strong> </strong><span>服务器端生成XML数据并发送给客户端:</span></span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端打开模板后，根据查询要求向服务器端发送请求，服务器端接收到请求后，组织XML数据，再发送给客户端；</span></p>
<p align=left><span>B.<span>&nbsp;&nbsp;&nbsp; </span></span><span>客户端接收<span>XML数据,分析、填充至CELL中:</span></span></p>
<p align=left>&nbsp;<span>(3)</span><strong><span> </span></strong><span>保存数据到服务器端<span>:</span></span></p>
<p align=left>&nbsp;</p>
<p align=left><strong><span>四：<span>Cell插件如何分发</span></span></strong></p>
<p align=left><span>分发</span><span> Cell </span><span>插件需要分发</span><span>2</span><span>个</span><span> OCX </span><span>文件，</span><span>1</span><span>个</span><span> DLL </span><span>文件，</span><span> </span><span>可以通过</span><span>Cab</span><span>包的形式供客户端下载安装。</span></p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/sunnyliu/aggbug/120437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunnyliu/" target="_blank">sunnyliu</a> 2007-05-28 13:21 <a href="http://www.blogjava.net/sunnyliu/archive/2007/05/28/120437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>