<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html><head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=FrontPage.Editor.Document>
<meta name=Generator content="Microsoft Excel 11">
<style type="text/CSS">
{
.showTD {color: #003366; }
.hiddenTD {display:none; }
.onFocue {color: #CC66FF;}
.offFocue {color:#003366;}
}
#floater {
LEFT: 445px; POSITION: absolute; TOP: 15px; VISIBILITY: visible; WIDTH: 125px; Z-INDEX: 10}
</STYLE>
</head>
<body><object classid="clsid:0002E559-0000-0000-C000-000000000046"  id="Spreadsheet1"  VIEWASTEXT>
<param name="HTMLURL" value="">
<param name="HTMLData" value="">
<param name="DataType" value="HTMLDATA">
<param name="AutoFit" value="0">
<param name="DisplayColHeaders" value="-1">
<param name="DisplayGridlines" value="-1">
<param name="DisplayHorizontalScrollBar" value="-1">
<param name="DisplayRowHeaders" value="-1">
<param name="DisplayTitleBar" value="0">
<param name="DisplayToolbar" value="0">
<param name="DisplayVerticalScrollBar" value="-1">
<param name="EnableAutoCalculate" value="-1">
<param name="EnableEvents" value="-1">
<param name="MoveAfterReturn" value="-1">
<param name="MoveAfterReturnDirection" value="0">
<param name="RightToLeft" value="0">
<param name="ViewableRange" value="1:65536">
</object>
<div class="hiddenTD" id="tablers">
<table width=95% align=center border=1 cellspacing=0 cellpadding=0>
<tr>
<td>name</td>
<td>password</td>
<td>age</td>
<td>email</td>
<tr>
<div align="center"><td>kang</td></div>
<td>123456</td> 
<td>20</td> 
<td>[email protected]</td>
<tr>
<td>shan</td>
<td>123456</td> 
<td>22</td> 
<td>[email protected]</td>
<tr>
<td>wei</td>
<td>123456</td> 
<td>18</td> 
<td>[email protected]</td>
</table>
</div>
<input type=button name=print value="打印" onclick="alert(Spreadsheet1)">
<script language="javascript">
Spreadsheet1.HTMLData = tablers.innerHTML ;
</script>
</body>
</html>现在我已经把数据放入excel中显示了.
但是不知道如何得到页面中的excel。
假如用记在页面中的excel中增加了数据或者是删除了数据、修改等操作。
请问是如何判断用户增加、修改、删除数据呢?

解决方案 »

  1.   

    使用excel解析工具可完成:package com.java91.parser;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hwpf.extractor.*;
    import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.usermodel.*;//import LuceneBook.ChineseAnalyzer;import java.io.FileInputStream;
    import java.io.File;public class WordParserTest { public static String excelfile = "F:\\docs\\Book1.xls"; public static String wordfile = "F:\\docs\\Site Linkmap Table of Contents.doc"; public static void main(String argv[]) throws Exception { //getWordText(wordfile);
    //getWordText(wordfile);
    //getExcelText(excelfile); } public static void getWordText(String filename) throws Exception {
    FileInputStream in = new FileInputStream(new File(filename)); HWPFDocument doc = new HWPFDocument(in);
    Range range = doc.getRange();
    String text = range.text(); for (int i = 0; i < range.numParagraphs(); i++) {
    Paragraph p = range.getParagraph(i); // 取得每个段落
    // 组合文字并添加换行
    text = p.text();
    text.trim();
    // text = " <br> " ;
    System.out.println(text);
    }
    } // 获取doc内纯文本信息
    public static void getWordText2(String filename) throws Exception {
    FileInputStream in = new FileInputStream(new File(filename)); WordExtractor extractor = new WordExtractor(in);
    String text = extractor.getText();
    System.out.println(text);
    } // 获取Excel内纯文本信息
    public static void getExcelText(String filename) throws Exception { HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
    HSSFSheet sheet = workbook.getSheetAt(0); // 创建对工作表的引用。 for (int i = 0; i < workbook.getNumberOfSheets(); i++) // 循环取表单对象
    {
    System.out.print("########## sheet:--" + i + " --########## ");
    sheet = workbook.getSheetAt(i); // 查阅文档的Sheet属性
    if (sheet != null) {
    for (int m = 0; m < sheet.getLastRowNum(); m++) // 按行循环取行对象
    {
    HSSFRow row = sheet.getRow(m);
    if (row == null) {
    break;
    }
    System.out.println("");
    if (row.getLastCellNum() <= 0)
    break;
    System.out.println("-----line:--" + m + " ---- ,col num:" + row.getLastCellNum());
    for (int n = 0; n < row.getLastCellNum(); n++) // 按列循环取单元格对象
    {
    HSSFCell cell = row.getCell((short) n); if (cell == null) {
    break;
    }
    int type = cell.getCellType();
    switch (type) {
    case 0:
    System.out.print(cell.getNumericCellValue() + " , ");
    break;
    case 1:
    System.out.print(cell.getStringCellValue() + " , ");
    break;
    case 2:
    break;
    case 3:
    System.out.print(" , ");
    break;
    default:
    System.out.print("未知的单元类型" + type + " , ");
    }
    }
    }
    }
    System.out.println();
    }
    }}
      

  2.   

    这个实现不了吧
    B/S  Excel 在客户端     页面执行在服务器。
      

  3.   

    您是指客户在ie浏览器页面中的修改吗?
    这样的修改是在客户端,你的web服务器是不可知的.
    你要用excel的组件解析,显示到ie中(用html控件,或者ajax判断修改哦...
    这样挺复杂的哦,呵呵excel解析工具:
    jxl
    jexcelapi    http://jexcelapi.sourceforge.net/
    Apache POI 这些都是可以的哦
      

  4.   


    你这上面所写的。哪如何得到页面上的excel文件呢?
    我就这个而郁闷。。是根据object中的id吗?
    然后在后台把它转换在Excel文件?
      

  5.   

    首先 Excel 在客户端  数据库在服务器端,如果要对数据库进行操作,肯定要把当前的Excel传送到服务器进行操作(建议使用poi或者jxl) 如果你,把用户在页面上操作完成后的页面Excel导成一个新的Excel到是可以实现,只要获取table的html传送到服务器,在另个页面使用excel格式输出即可
      

  6.   

    我觉得LZ标题有问题我还以为是嵌入文件呢只是解析数据使用JXL就好了
      

  7.   

    为何要在页面中去处理EXCELL呢。HTML和JSP只用于显示服务器生成的数据,包括HTML,WORD,EXCELL
      

  8.   

    大概知道了,你想做成什么样子了。 
    在页面上的数据希望显示成Excel表格样子,也可以对页面数据进行类似Excel的操作 
    点击保存之后,就提交变量部分的数据到数据库 
    这样理解对吗
      

  9.   


    没有要在页面上解决啊。只要用户点击保存。就可以放到后能去解决啊。。问题是:如何在后台获得页面上的excel.
    如果获得了。如果判断用户修改了哪些数据和增加了哪些数据等
      

  10.   

    没错
    就是不知道如何在后台获得页面上的excel. 
    如果获得了。如果判断用户修改了哪些数据和增加了哪些数据等
      

  11.   

    这个功能以及客户的体验都是十分完美的,不过实现起来需要大量的时间以及技术1.   你在页面上显示的Excel  其实是个table  那你的table提供的功能就要和excel中功能已那个
    2.   当点击提交时,你需要进行当初页面数据 和 提交时页面数据 数据变化的增量,建议使用datastore
    3.   提交都服务器,数据传送的格式问题,建议使用json
    4.   服务器解析json串,并且操作数据库
    5.   提交方式使用ajax
    整个流程就是这样,和我现在在做的公共平台的前端有点相似,实现起来细节问题太多,一个人的话很难实现
      

  12.   

    其实你把大家搞湖涂了。其实跟excell没关系。解决:
    1、页面还是HTML,使用CSS,控制提交表单(form)的格式,把它设计为EXCELL类似的样式。
    2、提交到后台,处理也跟EXCELL没关系。你只需要按照正常的参加接收就行了。
      

  13.   


    使用JS控制。如果TABLE某一行有修改,作个标记。然后设置一个参加传给服务器。以下JSP供参考
    <%@ page language="java" contentType="text/html;charset=UTF-8" %>
    <%@ page import="com.java91.common.constant.OptionType"%>
    <%@ page import="com.java91.common.manager.OptionManager"%>
    <%@ page import="com.opensymphony.xwork2.util.*"%>
    <%@page import="com.java91.common.util.*"%>
    <%@ page import="com.java91.produce.auto.beans.*"%>
    <%@ page import="com.java91.common.auto.beans.*"%>
    <%@ page import="java.util.*"%>
    <%@ taglib uri="java91" prefix="java91" %>
    <%@ taglib uri="fmt" prefix="fmt"%><html>
    <head><script language='javascript' charset='utf-8' src='/dwr/interface/commonDwrAction.js'></script>
    <script language='javascript' charset='utf-8' src='/dwr/engine.js'></script>
    <script language='javascript' charset='utf-8' src='/dwr/util.js'></script><script language='javascript' charset='utf-8' src='/js/framework.js'></script><script language='javascript' charset='utf-8' src='/js/ecside.js'></script>
    <script language='javascript' charset='utf-8' src='/js/ecside_msg_utf8_cn.js'></script>
    <script language='javascript' charset='utf-8' src='/js/prototype_mini.js'></script>
    <script language='javascript' charset='utf-8' src='/js/procBar.js'></script><script language='javascript' charset='utf-8' src='/js/area.js'></script>
    <script language='javascript' charset='utf-8' src='/js/areafun.js'></script>
    <link rel="stylesheet" type="text/css" href="/css/ecside_style.css"/></head>
    <body >
    <%ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");List workFlowListList=(ArrayList)vs.findValue("workFlowListList");%>
    <form name="editForm" action="produce/produceAction!addEditWorkFlowListSave.action" method="post"><input type="hidden" value="${selectedWorkFlowid}" name="selectedWorkFlowid" />
    <input type="hidden" value="" name="updateid" />

    <table id="workFlowListList" class="datalist" >
    <tr align="center">
    <th width="40">序号</th>
    <th width="110">工序</th>
    <th width="40">下一序号</th>
    <th width="110">下一工序</th>
    <th width="60">完成度</th>
    <th width="40">是否完工</th>
    <th width="100">备注</th>
    <th width="90">修改时间</th>
    <th width="80">修改人</th>
    <th width="40">是否生效</th>
    <th width="30">操作</td>  
    </tr> <%
    WorkFlowList workFlowList;
    if(null!=workFlowListList){
    for(int i=0;i<workFlowListList.size();i++){
    workFlowList=(WorkFlowList)workFlowListList.get(i);%>
       <tr align="center"  name="<%=workFlowList.getWorkflowllistid()%>"> 
       <input type="hidden" value="<%=workFlowList.getWorkflowllistid()%>" name="workFlowList.workflowllistid" /> 
    <td ><input type="text" onchange="setEdit(this);"  style="width:100%;" value="<%=CommonUtil.getDefault(workFlowList.getNumber())%>" name="workFlowList.number" /></td>
        <td><select onchange="setEdit(this);"  style="width:100%;" name="workFlowList.workstepid"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.workStep%>" code="<%=CommonUtil.getDefault(workFlowList.getWorkstepid())%>" /></select></td> <td ><input type="text" onchange="setEdit(this);"  style="width:100%;" value="<%=CommonUtil.getDefault(workFlowList.getNextnumber())%>" name="workFlowList.nextnumber" /></td>
        <td><select onchange="setEdit(this);"  style="width:100%;" name="workFlowList.nextstepid"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.workStep%>" code="<%=CommonUtil.getDefault(workFlowList.getNextstepid())%>" /></select></td>
    <td ><input type="text" onchange="setEdit(this);"  style="width:100%;" value="<%=CommonUtil.getDefault(workFlowList.getPercent())%>" name="workFlowList.percent" /></td>
    <td><select onchange="setEdit(this);"  style="width:100%;" name="workFlowList.isend"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.YesOrNo%>" code="<%=CommonUtil.getDefault(workFlowList.getIsend())%>" /></select></td>
    <td ><input type="text" onchange="setEdit(this);"  style="width:100%;" value="<%=CommonUtil.getDefault(workFlowList.getRe())%>" name="workFlowList.re" /></td>
    <td><input  style="width:100%;" type="text" value="<%=CommonUtil.getDateString(workFlowList.getUpdatetime(),"yyyy-MM-dd HH:mm")%>"  name="workFlowList.updatetime" ${readonly}/></td>

    <td ><input type="text" onchange="setEdit(this);"  style="width:100%;" value="<%=CommonUtil.getDefault(workFlowList.getUpdateby())%>" name="workFlowList.updateby" /></td>
        <td><select onchange="setEdit(this);"  style="width:100%;" name="workFlowList.active"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.YesOrNo%>" code="<%=CommonUtil.getDefault(workFlowList.getActive())%>" /></select></td>
            <td align="center" >
       <img style="cursor:hand" src="/images/button/delete.gif"onclick="deleteRow(this.parentNode.parentNode.rowIndex);" /></td>
           </tr>
    <%}} %><tr>
       <th colspan="13" style="text-align:right;background-color:#FFFFFF;">
    <input type="button" value="新 增" onclick="addRow(this.parentNode.parentNode.rowIndex);" >
    <input type="button" value="保 存" onclick="submit()">    
        </th>
    </tr></table>
    <br>
    <br></form>
    <!-- 新建记录所用模板 -->
    <textarea id="add_template" rows="" cols="" style="display:none">
    <input type="text"  style="width:100%;" value="" name="workFlowList.number" /><tpsp />
    <select style="width:100%;" name="workFlowList.workstepid"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.workStep%>" code="" /></select><tpsp />
    <input type="text" style="width:100%;" value="" name="workFlowList.nextnumber" /><tpsp />
    <select style="width:100%;" name="workFlowList.nextstepid"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.workStep%>" code="" /></select><tpsp />
    <input type="text"  style="width:100%;" value="" name="workFlowList.percent" /><tpsp />
    <select style="width:100%;" name="workFlowList.isend"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.YesOrNo%>" code="" /></select><tpsp />
    <input type="text" style="width:100%;" value="" name="workFlowList.re" /><tpsp />
    <tpsp />
    <tpsp />
    <select  style="width:100%;" name="workFlowList.active"><option value="">-请选择-</option><java91:genoption type="<%=OptionType.YesOrNo%>" code="" /></select> <tpsp />
    <img style="cursor:hand" src="/images/button/delete.gif"onclick="deleteRow(this.parentNode.parentNode.rowIndex);" />
    </textarea>
    <div id="editTaxtarea" style="POSITION:absolute;display:none;background-color:#FFF6F9;width:150px; height:100px;">
    <textarea id="taxtarea" rows="9" cols="19" style="FONT-SIZE: 11px;width:180px; height:150px;line-height:18px;border:0px solid #AFDDF4;color:#697268;background-color:#FFF6F9;" onKeyDown="if (event.keyCode==13) confirmEditTaxtarea();"> </textarea>
    <div style="text-align:right;color:#697268;"><a id=rowidMarkObj onclick="confirmEditTaxtarea();" title=确定 href="#">确定</a>&#160;<a onclick="cancleEditTaxtarea();" title=关闭 href="#">取消</a>&#160;</div>
    <br>
    </div><script type="text/javascript">function submit(){
    editForm.submit();
    }var flat="${flat}";
    if(flat!=""){
    alert(flat);
    }
    var reload="${reload}";if(reload!="" && reload=="true"){
    parent.window.location.reload();
    }</script><script>
    function addRow(myraw){
        var table=id("workFlowListList");
    var template=idvalue("add_template");
    var newTr=table.insertRow(myraw);
    template=template.split("<tpsp />");
    var cells=[];
    var columnNum=table.rows[0].cells.length;
    for (var i=0;i<columnNum;i++ ){
    cells[i]=newTr.insertCell(i);
    cells[i].innerHTML=template[i];
    //alert(cells[i].innerHTML);
    }
    }function deleteRow(i){ 
      id("workFlowListList").deleteRow(i);
    }function setEdit(obj){ 
    obj.style.backgroundColor ="#FFEAB6"; var id=obj.parentNode.parentNode.name;
    name("updateid").value=","+name("updateid").value+id+",";
    }
    </script>
    </body>
    </html>
      

  14.   

    <input type="hidden" value="" name="updateid" />
    这个参数就是要传到后台服务端的已修改的ID集,是这种格式:3434,4545,function setEdit(obj){ 
        obj.style.backgroundColor ="#FFEAB6";        var id=obj.parentNode.parentNode.name;        
        name("updateid").value=","+name("updateid").value+id+",";    
    }
      

  15.   

    您这样做完全都就是对table进行增删改。。??
      

  16.   

    而用户想要的就是能像Excel一样操作。。能进行
    行列求和。。等。