精华内容
下载资源
问答
  • 去掉滚动空白

    2019-08-08 17:38:26
    最近公司要做一组数据操作,需要实现的...刚开始想到的是用GridView去实现,这样显示数据和编辑数据方便,但是问题来了,我怎么Excel一样双击就可以编辑呢,GridView是需要点击“编辑”按钮,才可以编辑的,和需求...

    最近公司要做一组数据操作,需要实现的效果是。显示每个公司每个季度的产品,并求和,但是里面的产品数量是需要可以编辑的。

    就像编辑Excel一样,双击单元格,然后编辑数据,编辑完啦,还要更新到库里去

     

    刚开始想到的是用GridView去实现,这样显示数据和编辑数据方便,但是问题来了,我怎么像Excel一样双击就可以编辑呢,GridView是需要点击“编辑”按钮,才可以编辑的,和需求相差很大啊。而且还要实现很好的用户体验,不要全部页面的刷新,那样很不好的。。。

     

    考虑到这个,就直接用Ajax吧。用Ajax显示数据很简单,直接用js写一个table,或者在Ajax方法里面写就OK啦,但是要实现编辑,怎么弄呢?

     

    和同事商量以后,决定用如下的方法解决。

    同样是table,但是显示数据的是HTML的文本框,双击的时候才可以编辑,这个好实现。

    显示数据的时候,设置input type="text"的样式为不显示边框就可以啦,双击的时候改变样式显示边框就ok啦。

    按照这样的算法,主要的代码如下:

     

    ContractedBlock.gifExpandedBlockStart.gifCode
    function fun_GetCompanyList(type)
    {
    //利用ajax类里面的方法得到想要的数据,然后在GetProgram_Target_CallBack函数里面显示table
        Program_Target.GetProgram_Target("产品1",type,GetProgram_Target_CallBack);
    }
    function GetProgram_Target_CallBack(response)
    {
       
        if(response!=null)
        {
            var ds=response.value;
            if(ds!=null && typeof(ds)=="object" && ds.Tables!=null)
            {
                var strHtml="
    <br><table id='tabCompany' width=100% border=1px; borderColor=#0099ff >";
                strHtml=strHtml+"
    <tr><td>公司ID</td><td>Q1</td><td>Q2</td><td>Q3</td><td>Q4</td><td>合计</td></tr>";
    //读取回发事件得到的值,显示table
                for(var i=0;i
    <ds.Tables[0].Rows.length;i++)
                {
                    var id
    =""+ds.Tables[0].Rows[i].COMPANY_ID;
                    var q1
    =""+ds.Tables[0].Rows[i].Q1;
                    var q2
    =""+ds.Tables[0].Rows[i].Q2;
                    var q3
    =""+ds.Tables[0].Rows[i].Q3;
                    var q4
    =""+ds.Tables[0].Rows[i].Q4;
                    var total
    =ds.Tables[0].Rows[i].Total;

                    
    strHtml=strHtml+"<tr>
                    strHtml=strHtml+"
    <td><input type=text readonly=true  id="+id+" size='3'  value='"+id+"' ondblclick='fun_ChangeValue(this)' onblur='fun_UpdateValue(this)' /></td>";
                    strHtml=strHtml+"
    </td><td><input type=text readonly=true  id="+id+"_Q1 size='3'  value="+q1+" ondblclick='fun_ChangeValue(this)' onblur='fun_UpdateValue(this)' /></td>";
                    strHtml=strHtml+"
    </td><td><input type=text readonly=true  id="+id+"_Q2 size='3'  value="+q2+" ondblclick='fun_ChangeValue(this)' onblur='fun_UpdateValue(this)' /></td>";
                    strHtml=strHtml+"
    </td><td><input type=text readonly=true  id="+id+"_Q3 size='3'  value="+q3+" ondblclick='fun_ChangeValue(this)' onblur='fun_UpdateValue(this)' /></td>";
                    strHtml=strHtml+"
    </td><td><input type=text readonly=true  id="+id+"_Q4 size='3'  value="+q4+" ondblclick='fun_ChangeValue(this)' onblur='fun_UpdateValue(this)' /></td>";
                    strHtml=strHtml+"
    </td><td><input type=text readonly=true  id="+id+"_Total size='3'  value="+total+"/></td></tr>";
                                }
                strHtml=strHtml+"
    </table>";
    //这里把table写到需要显示的DIV里面
                document.getElementById("
    <%=divCompanyList.ClientID %>").innerHTML=strHtml;
            }
        } 
    //fieldset1,这个是像Winform一样的GroupBox
        document.getElementById("fieldset1").style.display="block";
    }

     

    文本框的样式首先设置为不显示边框

    ContractedBlock.gifExpandedBlockStart.gifCode
    <style>
        TD input
        
    {
             border
    :0px;
        
    }
        #tabCompany td
        
    {
            background
    :white;
            text-align
    :center;
        
    }
    </style>

     

    然后在 function fun_ChangeValue(obj)里面设置文本框的边框为红色。

    obj.style.border="1px solid red";
       

    在失去焦点的事件中判断修改前后的值是否有变化,如果有,就更新。

    如果没有就直接obj.style.border="0px solid white";,本来table的背景色就是白色,所以把文本框的边框设为白色就看不到咯

     

    把做出来的结果给经理审核,了解了流程后,经理提示,为什么不直接在编辑的时候才显示为文本框呢,这样比全部是文本框的性能肯定要好,排版也好一点。

     

    最后做出来的效果,如图所示:

    ,最后把公司简称加进来啦,双击时,td值转到text里面,然后构造一个text,边框为醒目的红色,编辑完后,提交更新到库里,然后再读出来。

     

    Ps:

    在构造text的时候,光标不能跟进来,focus()函数就可以设置光标了。但是还有一个问题,发现没

    光标是在text的最前面的,如果文本框里面有值,那样的效果就不太好啦,在text的onfocus事件里面调用一个方法'cc()',移动光标到数据的后面。

     

    ContractedBlock.gifExpandedBlockStart.gifCode
    <script language=javascript>
        
    function cc() 
        { 
         
    var e = event.srcElement; 
         
    var r =e.createTextRange(); 
         r.moveStart(
    'character',e.value.length); 
         r.collapse(
    true); 
         r.select(); 
        }
    </script>

     

    到现在为止,构造text的字符串变成了

     

    ContractedBlock.gifExpandedBlockStart.gifCode
    var strHtml="<input type=text size=5 style='border:1px solid red' onfocus='cc()' onblur='fun_UpdateValue(this)'  id='txtCompanyID'value='"+obj.innerText+"'  />";
    //obj.innerText 为双击的td的值,
    //注意,获得td的值,不能用value,而需要用innerText
            

     

    最后还是解决啦,

    转载于:https://www.cnblogs.com/daisy-popule/archive/2008/08/22/1274031.html

    展开全文
  • 有读者提了这样一个问题,想要制作如下的动态图表,要怎么实现? 动态图表展示.gif 可以看到,这个动态效果里有4种选择器,左上方的组合框呈现出选择不同的方案展示相应柱形图的效果; 中间的复选框...

    有读者提了这样一个问题,想要制作如下的动态图表,要怎么实现?

    动态图表展示.gif

    动态图表展示.gif

    可以看到,这个动态效果里有4种选择器,左上方的组合框呈现出选择不同的方案展示相应柱形图的效果;

     


     


     

    中间的复选框勾上显示差额的图表,不勾就不显示;

     


     

    右上角的滚动条则实现每页显示多少人,就有多少个柱子的功能;

     


     

    下方的滚动条实现数据的滚动,因为这个数据是有100多条,一个柱形图显然无法全部展示,所以要用滚动条去认为地滚动展示。

     


     


    下面我们就来实战一下要怎么实现。上面演示的是从网上找的模板,我们要做的真实数据是这样的:

     

    选择器的制作

    记得动态图表是怎么做的吗?首先要有数据源,然后制作选择器,接着取数,最后画图。如果你没有动态图表基础,可以参考以下文章:
    这样用Excel动态交互图表,还要什么前端?

    动态图表交互揭秘:制作选择器的奥秘

    动态图表揭秘:“动”的关键——取数

    下面我们就来制作选择器。

    滚动条

    总共122条数据,每个人们对应方案1和方案2的值,差异是方案1减去方案2,如果想要把122条数据放在一张图里,就需要用到滚动条了,所以我们先来做滚动条。

    点击【开发工具】-【插入】,找到【滚动条】的选项,在表格空白处画一个滚动条。

     


    画好滚动条以后,右键点击【设置控件格式】,在弹出的对话框中,修改以下选项,最小值为1,最大值为122,步长为1,单元格链接是图中标黄的G2单元格。

     


    这样,当我们移动滚动条时,G2单元格中的数值就会跟着变化。

     

    数值调节钮

    原模板右上角的滚动条我们用数值调剂钮来代替,同样点击【开发工具】中的【插入】,选择【数值调节钮】,在空白处画一个调节钮。

     


    右键【设置控件格式】,在弹出的对话框中,修改最小值为5,最大值为15,意思是我们的一个图表中最少有5个柱子, 最多有15个柱子,也可以根据自己的情况自由设置,链接到G3单元格中。

     


    这样,我们点一下数值调节钮,G3单元格中的数字也会跟着变。

     

    组合框

    同样在【开发工具】中插入【组合框】。

     


    右键【设置控件格式】,数据源区域选择提前写好的I2:I4区域,也就是方案一、方案二和方案对比,结果链接到G4单元格中。

     

    复选框

    同样我们做一个复选框的按钮,把它链接到G5单元格中。

     

    做好这4个选择器以后,我们要开始做动态图表了,大家要明确一个思路,图表之所以会动,是因为数据在动,数据动态变化,图表自然而然就跟着变了。所以我们的关键在于让数据动起来。

    取数:定义动态名称

    之前我们一贯的思路是做了选择器之后,做一个取数的区域,让这个区域里的数随着选择器里数值的改变而变化,但是这里我们不能固定一个动态区域了,因为这个区域本身就不是固定的了,它会随着数值调节钮的改变而增加或减少区域,会随着滚动条的改变选择不同区域的数值,因此,我们需要用offset定义动态名称来解决这个问题。

    X轴

    点击【公式】里的【定义名称】,起个名字,命名为x_data,意思是我们这里要选择的是图表中的X轴。在引用位置处输入公式

    =OFFSET(动态图表!$A$1,动态图表!$G$2,0,动态图表!$G$3,1)
    

    这个公式的意思是,以A1单元格为参考下,向下偏移G2单元格数值个行,也就是滚动条变化的值,向右偏移0列,选择G3单元格数值个行,也就是数值调节钮变化的值,选择1列。

    这里滚动条的值是1,数值调节钮的值是5,也就是以A1单元格为参考系,向下偏移1行,向右偏移0列,这时就选中了A2单元格,再选择5行,1列,这样就选中了A2:A6区域,也就是图里虚线选中的部分。

    Offset函数是实现通过给定参考系,按照偏移量返回特定引用区域的功能,也不复杂,只要想明白它是怎么用的就好。

    Offset(以什么为参考系,向下偏移几行,向右偏移几列,选择几行,选择几列)

     

    我们试着改变一下滚动条和数值调剂钮的值,发现x_data区域也跟着变化了,要想实现的就是这效果。

     

    方案1

    做好了X轴的动态变化,我们再来做方案1,也就是Y轴的动态变化,同样用到offset动态名称。命名为y1_data,输入公式

    =OFFSET(动态图表!$A$1,动态图表!$G$2,1,动态图表!$G$3,1)
    

    可以看到虚线框选到了方案1列所在的区域,这个公式和X轴公式的唯一区别在于向右偏移几列这个参数,这里是1,X轴公式是0.

     

    方案2

    同样给出方案2的动态变化,命名为y2_data,输入公式

    =OFFSET(动态图表!$A$1,动态图表!$G$2,2,动态图表!$G$3,1)
    

    和方案1公式不同的还是在于向右偏移几列这个参数,这里是2,意思是向右偏移2列。

     

    作图

    随便选择ABC3列数据中的区域做一个柱形图,得到如图所示的图表,选中柱子右键【选择数据】,在弹出的对话框中点击右边的水平轴标签中的【编辑】按钮。

     


    把轴标签里的值替换成我们刚刚写好的X轴也就是x_data,注意感叹号!前面的不要动,这是表名。

     


    同样对方案1和方案2进行编辑

     


    将方案1里的系列值替换成y1_data,方案2替换成y2_data

     


    这样我们在调整滚动条和数值调节钮的时候,图表就会变化了,雏形差不多出来了。

     

    方案1&2再细化

    细心的你可能发现了,我们最初想要实现的是用组合框控制方案1、2的图形变换,现在这样是两种方案同时呈现的图,和组合框好像没什么关系。

    对了,因此需要对方案1和方案2的offset函数再优化,在G6单元格写一个判断函数来告诉offset向右偏移几列这个参数,如果G4单元格,也就是组合框的值为1,也就是选择了方案1的话,if的值为1;否则的话再进行判断,如果组合框的值为3,也就是选择了方案对比的话,if的值也为1,否则为0。这个意思是如果组合框选了方案1和方案3,都向右偏移1列,如果选择了方案2,就偏移0列。(大家细细琢磨一下,得自己理解)

     

    同样给方案2一个if判断,如果组合框选了方案2和方案对比,就向右偏移2列,否则偏移0列。

     

    我们再来重新写一下方案1的offset偏移公式,命名为y11_data,输入公式

    =OFFSET(动态图表!$A$1,动态图表!$G$2,动态图表!$G$6,动态图表!$G$3,1)”
    

    和y1_data公式唯一的区别在于向右偏移几列这个参数,这里要改成G6单元格,也就是我们刚if函数去判断的那个单元格。

     

    同样把方案2的公式也改一下,命名为y22_data,输入公式

    =OFFSET(动态图表!$A$1,动态图表!$G$2,动态图表!$G$7,动态图表!$G$3,1)
    

    这里也是向右偏移几列写成了G7单元格。

     

    组合框动态图表

    我们选中图表中的蓝色柱子,将公式栏中的y1_data,改为刚刚写好的y11_data

     

    选择橙色的柱子,把y2_data改成刚刚写好的y22_data。

     

    这时我们改变组合框的选项,就实现我们最初想要的功能了。

    组合框.gif

    组合框.gif

    复选框动态图表

    快完成了,别忘了还有一个复选框控件,要实现的功能是点击“显示差额”复选框,就输出方案1和方案2的差额对比的图表,数据源就是D列差额。思路还是用offset动态名称加上条件判断的方法。

    先在G8单元格给定向右偏移几列这个参数的条件判断,如果G5单元格为真,if判断的值就为3,否则为0,意思是如果选择了复选框,就向右偏移3列,否则就不偏移。

     

    再来给定动态名称,命名为yc_data,输入公式“=OFFSET(动态图表!2,动态图表!2,动态图表!8,动态图表!3,1)”

     

    同样地,随便选择区域数据插入图表,点击柱子,将x轴部分改为x_data,Y轴部分改为yc_data。

     

    这样,当我们点击显示差额,这个图就跟着显示或不显示了。

    图表美化

    把组合框、复选框和数值调节钮拖到第二行,并把这一片区域填充为橙色。

     

    把 差额 做的这个表拉过来和大表对齐。

     

    把后面那一片背景填充为金色。

     

    把两个图表设置成无颜色填充无框线,再给这片区域加上粗线框,最后得到如下结果:

     

    成果.gif

    成果.gif


    猜你喜欢:
    什么是好的数据指标:精益数据分析

    泰坦尼克号数据分析

    深入浅出数据分析

    数据分析都有哪些岗位?

    为什么要学统计学:赤裸裸的统计学

    成为数据分析师的第三年,我写了10W字

    @ 作者:可乐
    @ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
    @加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容

    微信公众号

    微信公众号

    个人微信号

    个人微信号

    展开全文
  • jquery处理进度滚动

    2015-11-16 13:58:45
    项目中要用到导入excel,显示处理进度条,怎么实现呢? 我说下具体做法,欢迎批评指正。 1、第一步 后台插入数据库时,记录总的excel条数和处理了多少条。 统统把他们放在session中。 2、第二步利用jquery的...

    项目中要用到导入excel,显示处理进度条,怎么实现呢?

    我说下具体做法,欢迎批评指正。

    1、第一步

    后台插入数据库时,记录总的excel条数和处理了多少条。

    统统把他们放在session中。

    2、第二步利用jquery的progressbar组件(注意jquery版本,因为版本的不同,使用会有所不同,建议查看对应版本的api)

     代码片段

     <style>
      .ui-progressbar {
        position: relative;
      }
      .progress-label {
        position: absolute;
        left: 50%;
        top: 4px;
        font-weight: bold;
        text-shadow: 1px 1px 0 #fff;
      }
      </style>
      
    <script type="text/javascript">
        var progressbar = $( "#progressbar" );
        var progressLabel = $( ".progress-label" );
    	  progressbar.progressbar({
    	  	 value: true,
    	  	 change: function() {
    	         progressLabel.text( progressbar.progressbar("option","value" ) + "%" );
    	     },
    	    complete: function() {
    	         progressLabel.text( "完成!" );
    	     }
        });
    	
    	function downloadAttResult() {
    		document.location.href = "${_currConText }/attendanceResult/operate/downloadAttResult.action";
    	}
    	
    	function process(){
    		$.ajax({
    			url:"${_currConText}/common/view/ajaxGetDealProcessStatus.action", 
    			data:{ranNum:Math.random()},
    			type:"post",
    			dataType:"json", 
    			success:function(data){
    				 var val=parseInt(data.bfb);
    		    	 progressbar.progressbar('option','value',val+1);
    			     if(val>=99){
    					  $("#import_button").attr("disabled",false);
    				      document.getElementById("importClassIFrame_td").style.display="";
    			     }else{
    					  setTimeout(process,100);
    			     }
    			}
    		});
    	}
      	$("#import_button").click(function(){
     		document.getElementById("importClassIFrame_td").style.display="none";
      		var tag = 1;
    		var str = "";
    		var filename = document.getElementById("myFile").value;
    		if (!filename) {
    			str = str + "请选择要导入的文件!";
    			tag = 0;
    		} else {
    			var arys = filename.split('.');
    			var suffix = arys[arys.length - 1];
    			var temp = "xls";
    			if (suffix != temp) {
    				str = str + "只能导入后缀.xls文件!";
    				tag = 0;
    			}
    		}
    		if (tag == 1) {
    			  $("#form2").submit();//form提交耗时
    		  	  $("#progressbar").show();
    			  $("#import_button").attr("disabled",true);//按钮变灰,解决重复提交
    			  setTimeout(process,1000);
    		} else if (tag == 0) {
    			alert(str);
    			return false;
    		}
      });
      	
      	
      	
      </script>




    <div id="progressbar" style="display:none"><div class="progress-label"></div></div>



    <td id="importClassIFrame_td"  bgcolor="#FFFFFF" width="100%" height="100px;" style="display:none">
    <iframe name="importClassIFrame" id="importClassIFrame"   width="100%" height="100%" frameborder="0" scrolling="no"></iframe> 
    </td>

    3、其中前台定时ajax请求获得处理条数,从而出现滚动条效果。



    问题:因为用到session,存在多线程问题,同时打开多个窗口上传excel,就会相互影响。怎么处理,请给点意见。

    展开全文
  • 于是有了这样一个问题,一次性将数据全部显示出来,页面就会出现滚动条,这样的话就不能同时看到表头信息和表格底部的数据记录,把每个月的信息记录都分为两页显示的话,又麻烦(切换月份后还要在进行分页操作)。...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    音乐播放器 内含歌词显示实现源码 ActiveXDemo 演示了装载以及卸载atl控件的操作以及注册操作 ado 登录模块的制作 如题,登陆数据库的操作。 ado,dao,odbc数据库连接vc代码 演示了不同的数据库的各种操作(连接、...
  • jsp编程技巧集锦

    2008-03-19 17:23:17
    在jsp中,怎么实现按回车就可提交表单? 16. 在JSP中如何传递数组? 17. 按地址取图片? 18. JSP中如何上传图片到数据库字段? 19. 页面自动刷新? 20. 表单自动提交? 21. 从JSP传数据的到JAVABEAN...
  • asp.net知识库

    2015-06-18 08:45:45
    如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup ...
  • vb改写成c#的问题提问

    2016-08-19 12:03:58
    Private Sub Cmdback_Click() Unload Me End Sub Private Sub Comboclass_Click() Refresh_culture End Sub Private Sub Combofour_Click() Refresh_culture ...怎么在vs用c#实现这个功能 详细些,谢谢帮助
  • MAPGIS地质制图工具

    2013-05-06 16:15:30
    3、增加标尺显示。(还存在问题) 4、程序框架做了调整。 编辑本段切剖面图过程 完成剖面图所需的步骤: 1、必需完成地形线赋高程。 2、读取地形数据。 3、读取钻孔数据。 4、读取槽探数据。 5、读取地质信息。 6、...
  • 11) DBGRIDEH选定多行删除怎么实现...............................................................36 12) DBGrid 滚动表格的代码................................................................................
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不...
  • -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题188 如果你完全不同意你上司的某个要求,你怎么处理 341 16.3 小结 342 第17章 智商类面试题( 教学视频:43分钟) 343 17.1 脑筋急转弯 343 面试题189 美国有多少辆汽车 343 面试题190 下水道的盖子为什么是...
  • 包含视频(包含200个文件)和电子书 目录 第1篇 求职准备 第1章 应聘软件开发职位前必须知道的...面试题188 如果你完全不同意你上司的某个要求,你怎么处理 341 16.3 小结 342 第17章 智商类面试题( 教学视频...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

excel怎么实现滚动显示