基于Excel的UI/UX框架设计与实现

在现代软件开发中,用户界面和用户体验(UI/UX)的设计至关重要。然而,并非所有情况下都能选择最适合的工具或框架。本文将介绍一种在Excel环境中设计和实现UI/UX的框架,尽管它可能不是最优的选择,但在某些特定场景下,如受限于Microsoft Office环境,它提供了一种可行的解决方案。

在为客户开发一个替换调度器时,由于客户的安全限制,只能使用MS Office。这意味着不得不使用ExcelVBA来完成任务。在开发过程中,遇到了代码维护困难、代码和图形的可扩展性问题,以及易用性问题。为了解决这些问题,决定开发一个框架,以模拟WPF的优点,尽可能简化开发过程。

框架设计

框架的主要目标是实现代码的可维护性、可扩展性和易用性。通过创建两个主要的类——CellView和TemplateView——来实现这些目标。CellView类简化了与单个单元格的交互,而TemplateView类则作为模板类使用,用于定义视图的层次结构和布局。

CellView类是一个轻量级对象,它包含一个指向特定单元格的Range对象和一些属性访问器。这些属性访问器使得与单元格的交互更加简单。例如,可以通过Value属性来获取或设置单元格的值,通过Text属性来获取或设置单元格的文本,通过Address属性来获取单元格的地址。

Private pRg As Range ' Gets/Sets cell this object points to Public Property Get Pos() As Range Set Pos = pRg End Property Public Property Let Pos(Value As Range) Set pRg = Value End Property Private Function IsInit() As Boolean IsInit = (Not pRg Is Nothing) End Function Public Property Get Value() As String If IsInit Then Value = Pos.Value End If End Property Public Property Let Value(val As String) If IsInit Then Pos.Value = val End If End Property ' ... 其他属性 ...

TemplateView类用于定义视图的层次结构和布局。每个视图都知道并引用其父视图和子视图。这种设计使得视图的放置和缩放变得简单直观。

Private pParentView As Variant ' Replace 'Variant' with actual parent class Private pSett As Settings Private pRg As Range Private pViewWidth As Integer Private pViewHeight As Integer Private pInit As Boolean Public Function Init(parentView As Variant) If Not pInit Then Set pParentView = parentView Set pSett = Singletons.GetSettings pViewWidth = 1 pViewHeight = 1 End If pInit = True End Function ' ... 其他方法 ...

使用框架

要使用这个框架,首先需要探索提供的Excel文件及其代码。然后,可以通过创建CellView和TemplateView对象来构建UI/UX。例如,可以创建一个EmpTtlView对象来处理单个员工的日总计数据。

Public TimeWk As CellView Public GoalWk As CellView Public SalesWk As CellView Public OverUnderWk As CellView Public TimeYTD As CellView Public GoalYTD As CellView Public SalesYTD As CellView Public OverUnderYTD As CellView Public TimeLbl As CellView Public GoalLbl As CellView Public SalesLbl As CellView Public OverUnderLbl As CellView ' ... 初始化和设置位置 ...
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485