2024年网页上制作实时变化 篇1
您好,在Excel中实现实时输入提示的效果并不难,废话不多说,直入主题,请按下面步骤操作,不费吹灰之力,即可达到您想要的效果。
1、在需要实时输入提示的工作表(以名为“效果演示”的工作表为例)中插入两个ActiveX控件,一个是文本框,一个是列表框,具体操作参见如上动图。
2、在名为“效果演示”的工作表上右击鼠标点击【查看代码】进入VBE编辑器,将下列代码粘贴进去。具体操作参见如上动图。
相关代码如下:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With TextBox1
If Target.Count = 1 Then
If Target.Column = 3 Then
.Visible = True
.Height = Target.Height
.Width = Target.Width
.Top = Target.Top
.Left = Target.Left
.Activate
.Value = ""
ListBox1.Visible = False
ListBox1.Top = Target.Top
ListBox1.Left = Target.Left + Target.Width
ListBox1.Clear
Else
.Visible = False
ListBox1.Visible = False
End If
End If
End With
End Sub
Private Sub ListBox1_Click()
ActiveCell = ListBox1.Value
ListBox1.Visible = False
TextBox1.Visible = False
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim cell As Range, rng As Range
With ListBox1
Set cell = Sheets("商品清单").[a2:a40]
.Visible = True
.Clear
For Each rng In cell
If InStr(rng, TextBox1.Value) Then .AddItem rng.Value
.Font.Size = 10
.Font.Name = "微软雅黑"
.Height = .Font.Size * .ListCount + 30
Next
End With
End Sub
3、将上图红色框中的代码改成提示内容所在的工作表和单元格区域,格式为:工作表.单元格区域,本例中为【商品清单】表中的【A2:A40】单元格。
4、根据需要更改上图绿色框中的代码列号,3表示C列,即实时录入提醒只在C列起作用。
5、具体演示效果参见如上动图。
6、最后务必将文件保存成启动宏的工作簿,即后缀名为.xlsm格式的文件。方便下次继续使用。
2024年网页上制作实时变化 篇2
题主描述的这个问题,其实在前端表格领域是最常见的需求之一。这里简单罗列几点表格组件中最常用的功能:怎样让表格样式丰富多变的同时,又能实现数据驱动?怎样给单元格中优雅地嵌入诸如checkbox、button、autocomplete、超链接,甚至图片、图表、二维码、富文本等前端常见的元素?怎样高效地实现排序、筛选、分组、树、数据校验,甚至数据汇总等能力?
以上是不是还能命中几个题目没提到的潜在需求呢?
要设计表格组件,这些问题都不得不考虑,下面我以目前市场上比较成熟的表格组件SpreadJS为例,谈一谈部分需求的设计思路。SpreadJS是纯前端的表格控件,本身的实现不依赖任何插件、框架或后端库,比较能说明问题:
怎样让表格样式丰富多变的同时,又能实现数据驱动?
SpreadJS采用了数据与视图分离、并与数据源绑定的设计。跟样式相关的内容保存在单元格属性中,与数据源(JSON)分离开,通过数据绑定关系保存数据和单元格位置的映射。渲染引擎再根据这些信息,实现数据展示、交互的能力:
表格模板与数据源双向绑定
可以实际操作一下SpreadJS的表格绑定功能。
通过这样的设计,数据驱动所需的元素就都有了,接下来实现渲染内容随数据源变更、新数据追加推送、条件改变、公式计算等因素联动都已不是难题。
怎样给单元格中优雅地嵌入诸如checkbox、button、autocomplete、超链接,甚至图片、图表、二维码、富文本等前端常见的元素?
SpreadJS是采用Canvas渲染的表格区域,当需要修改单元格内容时,会响应操作事件,创建一个input元素在单元格上,填写后执行回填,将数据返回数据源。渲染层把基础功能进行了封装,并暴露了原型接口。
这样的设计为扩展和丰富输入形式提供了可能。比如我们可以定义,当双击单元格时,不弹出input,而是弹出Autocomplete组件,我们要做的只是重写“弹出input”的方法即可。如图:
SpreadJS AutoComplete
模态窗同理:
SpreadJS 模态窗
参考示例:SpreadJS自定义单元格 —— 模态窗
怎样高效地实现排序、筛选、分组、树、数据校验,甚至数据汇总等能力
实际上有了以上两个案例的支撑,不难理解在这几个需求中,基本上都是对数据源本身的操作。主要不断地实现同一个接口(JavaScript里通过继承或重写prototype),可以优雅高效地实现。
相关资料:
SpreadJS 官方主页SpreadJS 产品文档在线 Excel 编辑器