• 其实EXCEL也是一个很好的管理程序开发工具


    Excel是公认的优秀的办公工具,我常用它来做Bug管理,计划跟踪,数据报表。这是最常用的用途,如果想用它来做数据分析和数据报表,公式要玩的很熟练。再进一步,Excel支持VBA宏,可以从更高级别上定制EXCEL,方便应用。EXCEL可以做管理程序的想法,源于最近对老外的EXCEL的分析。
    国情不同,老外一般不会轻易发起软件项目。我不熟悉国外制作软件的流程,不敢贸然评论。但是我手头接触的这些EXCEL确实充当了管理软件的角色,它可输入数据,自动计算,批注审核。

    1  EXCEL可以保存数据,行(数字标识)列(字母标识)相当于数据库的表的行和列。
    2  EXCEL内置了大量的公式,供用户使用。还支持自定义公式,方便特定的行业应用开发。
    关于如何用C#开发自定义的EXCEL公式,请参考这篇文章
    如何给Excel添加用户自定义的公式

    3  EXCEL是插件结构的程序,可以很方便的把功能集成到EXCEL中
    比如常见的金山词霸,或是我写过的数据导入程序
    image
    这篇文章的地址在 http://www.cnblogs.com/JamesLi2015/archive/2010/02/25/1673124.html

    4 如何用EXCEL做界面
    EXCEL可以做界面,EXCEL内置常用的工具箱,具备我们编程开发的常用控件。
    image

    用Toolbox做界面,配合VBA脚本控制算法,也可做出符合特定行业的应用。

    再谈点实作方面的内容,如下图,这是一个计算机主机报价计算程序
    image 
    打开这个EXCEL文件,根据需要选择不同的配置方案,按回车键,系统计算出主机的报价。
    再来看看这个小应用是如何做出来的。
    先在EXCEL中建立如下的表格映射关系
     image
    这是一个简化的例子,我没有考虑太多的因素。
    如上的数据,硬盘以容量来区分价格,80G的价钱为160RMB,160G的价钱为220。
    处理器,主板,内存的价格计算也是同样的道理。
    假设如下的应用情景:用户打开这个EXCEL,只需要从列表中选择硬盘,CPU,主板,内存的
    各个配置参数,系统就把价格计算好了。
    比如上面的图片,选择160G硬盘,单核CPU,A2型号的主板,2G内存,EXCEL根据数据映射,计算出该配置的报价为1660。

    如果用程序的实现方式,我们需要打开VS IDE,新建一个Page或Form,拖动几个DropDownList或ComboBox到界面上,
    设置它的Items集合的值,然后是设计计算方法。
    如果放映射值直接硬编码到程序中,可能的实现是这样
    string  cpu=ddlCPU.SelectedValue;    // ”单核”;
    int  price=0;
    if(cpu==”单核”)
        price=600;
    else if(cpu==”双核”)
       price=1000;
    这种实现方式可行,但经不起变化,稍微更改一下价格,整个程序需要重新编译和调试。
    我们换一种方式,把价钱放到配置文件中,比如Harddisk.xml文件是存放硬盘的价格
    <?xml version="1.0" encoding="utf-8" ?>
    <Items>
      <Item Name="80"   Price="160"></Item>
      <Item Name="160"   Price="220"></Item>
      <Item Name="250"   Price="240"></Item>
      <Item Name="320"   Price="290"></Item>
      </Items>
    把这个文件读进一个Hashtable结构中,键是Name,值是Price。
    每次计算就去读取这个xml文件,根据键来取值。
    由于这个配置不会轻易改变,系统还考虑应该把它加入到系统缓存中,提高运行效率。
    也许你还注意到上面图片中的”小于”字。有时候衡量一件物料的价格没有这么精确,
    通常它只指定一个范围,超过指定的范围价格才会变化。比如化学药水,容积在1L(升)以内是100RMB,
    1L至2L之间的价格是140RMB,遇到这种情况,Chemical.xml配置文件应该这样写
    <?xml version="1.0" encoding="utf-8" ?>
    <Items>
      <Item MIN="0"   MAX="1"    PRICE="100"></Item>
      <Item MIN="1"   MAX="2"   PRICE="140"></Item>
    <Items>
    现在我需要购买1.2升化学药水,上面的配置文件很清楚的说明了需要花费140RMB.
    如何在程序中实个逻辑,我的做法是设计一个结构,
    struct  Item
    {  
      float min;
      float max;
      int price

    }
    逐行扫描Chemical.xml文件,把它的每一个行数据,填充到一个Item结构,放到Hashtable中。
    比如,现在需要计算1.2L的药水的价钱,遍历一下包含Item集合值的Hashtable,取出它的Item结构
    如果1.2是大于等于Item的min,并且小于max的值,就取出price值,跳出循环。

    至此,我已经解释如何把上面的EXCEL做的主机报价计算工具转换为我们熟悉的C#的做法。
    考虑到软件费用(EXCEL,C#开发用VS IDE)和每小时人工费用,相比之下,EXCEL版本的计算工具,
    比应用程序的成本要低很多。而两者达到的目的都是一样的,都可以实现这个功能。

    再分析一下EXCEL版本的主机报价计算工具实现的三个细节。
    大部分的操作都很简单,讲一下List的制作和公式的做法
    菜单 Data—> Validation 弹出对话框,选择List, 指定Source即可,如下图
    image

    公式计算 常常会嵌套大量的IF语句,如下计算硬盘价钱的公式
    =IF(B4=B9,C9,IF(B4=B10,C10,IF(B4=B11,C11,IF(B4=B12,C12))))
    再把用到的常量和参数隐藏起来,不让用户修改,也可把worksheet加密,阻止用户修改。

    最近分析的公司的EXCEL文件,大量的运用上面我说的技巧,界面设计的也很成熟。
    我已经讲清楚了它的原理,结论就是EXCEL其实也是一个很好的管理程序开发工具。

    文件下载  /Files/JamesLi2015/ExcelApplication.zip

  • 相关阅读:
    闭包
    iframe
    函数声明和函数表达式
    简单的事件委托
    onhashchange
    WebP探索
    Chrome
    适合自己学习的一些网站
    模拟jQuery的一些功能
    __autoload()方法
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1676752.html
Copyright © 2020-2023  润新知