• 用Excel生成代码


    通常的代码生成器都是根据字段来生成代码的,例如为表生成相应的实体类代码,不过今天我要生成的并非实体类,而是表中的内容,生成相应的常量定义。
    例如某个表有三个字段:ID,主键,整型;Name:字符串;Description,字符串。
    我现在想让Name作为变量名称,ID为值,Description为注释,如果把这个表的内容导到Excel工作表里,那么就可以再加一列,用公式生成代码,假设当前行为2,并且字段按上述顺序排列,那么生成代码的公式如下:
    ="public const int " & UPPER(B2) & " = " & A2 & ";  // " & C2
    假设这三列的内容分别是:100,Can_Edit_Post,是否允许修改帖子内容,那么用以上公式计算的结果以下:
    public const int CAN_EDIT_POST = 100; // 是否允许修改帖子内容
    然后用填充柄把所有行的公式一次搞定,复制到代码文件中就搞定了,确实很方便,但这样算不上太完美,如果可以生成下面这样的形式就更完美了:
    /// <summary>
    /// 是否允许修改帖子内容
    /// </summary>
    public const int CAN_EDIT_POST = 100;
    如果把上面的公式修改一下来生成这样的文字也是可以的,不过会马上感觉到失望,因为生成之后的代码如果复制并粘贴到代码文件中,每个单元格的内容都会被自动加上一对双引号。原因嘛,我估计就是换行了,我试着到网上去寻求解决方案,不过可惜的是没有。那怎么办呢,我好好想了想,可以变通变通,把每一行内容在另一个工作表里拆分到四行里,分别对应四行代码,这样再复制粘贴就没有问题了。
    可是,新的问题又来了,原先一对一行的时候,单元格的引用是非常方便的,直接用一个相对地址就可以了,可是一对四就不能直接这样引用了,必须进行一点转换。做这样一个假设,源数据从第2行开始,而代码就直接从第1行开始,因为是1:4,所以在第二个表里只要将当前行号除以4再加上2就是相应源数据里的行号了。下面列出涉及到的几个公式:
    ROW() - 获取当前行号。
    ADDRESS() - 根据行-列的整型数值生成相应单元格地址的字符串表达式,例如ADDRESS(2,1)生成"$A$2"。
    INDIRECT() - 根据单元格地址的字符串表达式获取相应单元格的地址,例如INDIRECT("$A$2")与直接使用$A$2的效果是一样的。
    有了以上三个公式的帮忙,问题可以得到圆满的解决,以生成第二行注释为例说明一下公式的使用:
    = "/// " & INDIRECT(ADDRESS(INT(ROW() / 4) + 2, 3))
    虽然可以生成这样的代码,但可能还有许多更复杂的需求可能是达不到的,除非另外编程。
  • 相关阅读:
    3. 技术专题
    3. 技术专题
    1. 个人经验总结
    2. 阿里巴巴Java开发手册主题
    自动化构建工具演化、对比、总结
    2. 阿里巴巴Java开发手册主题
    (转)高并发高流量的大型网站架构设计(二)
    (转)高并发高流量的大型网站架构设计(一)
    (转)可伸缩性最佳实践:来自eBay的经验
    (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别
  • 原文地址:https://www.cnblogs.com/effun/p/1555429.html
Copyright © 2020-2023  润新知