游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5772|回复: 4

[讨论] 如何使用XLS编辑宏导出游戏需要各种数值配置文件

[复制链接]

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2006-6-9 23:23:00 | 显示全部楼层 |阅读模式
附件——xls数值导出配置文件(例).rar    文件是我已经写宏的一个例子

例子中共有三个XLS表单,都可以使用相同的宏

如何使用宏:
打开例子
工具-> 宏 -> 宏 -> 出现宏界面
选中“点这里的宏”  -> 执行
你会看到D盘目录中出现一个1001.txt的文件,这便是使用宏导出的一个数值配置文件了,三个XLS表单中的数据全部被导出了


如何编辑宏:
打开例子
XLS工具-> 宏 -> 宏 -> 出现宏界面
选中“点这里的宏”  -> 编辑
你会看到我写的导出配置文件的代码,其中有注释补充,稍微有点VB语言功力的都能看懂,宏十分简单。


在此我贴一下宏的所有代码:




Sub 点这里的宏()



    '变数宣告
    Const inOutFileNumber = 1
    Dim jianzhuming As String
    Dim maohao As String
    Dim fenhao As String
    Dim dayu As String
    Dim xiaoyu As String
    Dim jianhao As String
    Dim gang As String
    Dim deng As String
    Dim szOutFilename As String
    Dim colIndex As Integer
    Dim rwIndex As Integer
    Dim colMax As Integer
    Dim rwMax As Integer
    Dim rwStart As Integer
    Dim colStart As Integer
   
    '定义一些字符串,导出配置需要的格式时插入
    xiaoyu = "<"
    jianhao = "-"
    gang = "/"
    deng = "="
   

    '需要导出的配置文件名和路径,在XLS文件中的F2格子中有写导出配置文件名和路径——d:\1001.txt
    szOutFilename = Worksheets(1).Cells(2, 6).Value
   
    '打开szOutFilename变量刚才获得的需要到处的配置文件名和路径
    Open szOutFilename For Output As #inOutFileNumber
    For idx = 1 To Sheets.Count
    Sheets(idx).Select
   
    '以下使用XLS宏命令ActiveSheet.Cells获取XLS文件中的每格数据,ActiveSheet.Cells(行, 列).Value
   
   
    '取得XLS第二行中定义的需要需要导出的配置文件数据的开始行、开始列、最大行(也就是数据读取结束行)、最大列(也就是数据读取结束列)
    hangStart = ActiveSheet.Cells(2, 1).Value
    lieStart = ActiveSheet.Cells(2, 2).Value
    hangMax = ActiveSheet.Cells(2, 4).Value
    lieMax = ActiveSheet.Cells(2, 5).Value
   
   
    '以下是读取XLS指定格子中的数据并将它们拼接字符串输出到导出的配置文件中
    jianzhuming = ActiveSheet.Cells(7, 1).Value
    maohao = """"
    fenhao = ";"
    dayu = ">"


    Print #inOutFileNumber, "<meta http-equiv";
    Print #inOutFileNumber, "=";
    Print #inOutFileNumber, """";
    Print #inOutFileNumber, "Content-Type";
    Print #inOutFileNumber, """";
    Print #inOutFileNumber, " content=";
    Print #inOutFileNumber, """";
    Print #inOutFileNumber, "text/html; charset";
    Print #inOutFileNumber, "=";
    Print #inOutFileNumber, "utf-8";
    Print #inOutFileNumber, """";
    Print #inOutFileNumber, ">"



'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">




    Print #inOutFileNumber, "<?"
    Print #inOutFileNumber, "$building["""; jianzhuming; """]->info =";
    Print #inOutFileNumber, "" & maohao & "" & jianzhuming & "的说明" & maohao & "" & fenhao & ""
   
        For hang = hangStart To hangMax + hangStart - 1
         
            For lie = lieStart To lieMax + lieStart - 1
            
            Print #inOutFileNumber, "$building["""; jianzhuming; """]->level["; ActiveSheet.Cells(hang, 2).Value; "]";  '名称
            
            If lie > lieMax + lieStart - 4 Then
               Print #inOutFileNumber, "[" & maohao & ActiveSheet.Cells(6, lie).Value & maohao & "]";    '项目
               Print #inOutFileNumber, "[";
               
                If lie = 9 Then
                    Print #inOutFileNumber, "0";
                ElseIf lie = 10 Then
                    Print #inOutFileNumber, "1";
                ElseIf lie = 11 Then
                    Print #inOutFileNumber, "2";
                End If
               Print #inOutFileNumber, "]";
               

            Else
                Print #inOutFileNumber, "[" & maohao & ActiveSheet.Cells(6, lie).Value & maohao & "]";    '项目
            End If
            
  
            Print #inOutFileNumber, "="; ActiveSheet.Cells(hang, lie).Value; ""; "";        ''数字
            Print #inOutFileNumber, ";"
            Next lie
            Print #inOutFileNumber, ""
            Print #inOutFileNumber, ""
            Print #inOutFileNumber, ""
            
        
            If hang = hangMax + hangStart - 1 Then
                Print #inOutFileNumber, "?>"
            End If
        

        Next hang
    Next idx
    Close #inOutFileNumber


End Sub

sf_200669232325.rar

13.43 KB, 下载次数:

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-6-9 23:24:00 | 显示全部楼层

Re:如何使用XLS编辑宏导出游戏需要各种数值配置文件

不好意思,附件xls数值导出配置文件(例).rar  在上传后名字变为sf_200669232325.rar

22

主题

371

帖子

387

积分

中级会员

Rank: 3Rank: 3

积分
387
发表于 2006-6-10 11:48:00 | 显示全部楼层

Re:如何使用XLS编辑宏导出游戏需要各种数值配置文件

另一种方法是,直接用excel将其另存为以逗号分割的csv文件
VBA的功能还是弱了一点

数据和程序分开才是好习惯

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-6-10 14:27:00 | 显示全部楼层

Re:如何使用XLS编辑宏导出游戏需要各种数值配置文件

如果是我,我会把 配置文件 复制进excell,分列做成模板,再做一张基础表,把模板需要的数据关联到基础表,关联好后,把模板的数据复制到记事本,代替掉多余的空格,应该就可以了把

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-6-12 14:46:00 | 显示全部楼层

Re: Re:如何使用XLS编辑宏导出游戏需要各种数值配置文件

Cipher: Re:如何使用XLS编辑宏导出游戏需要各种数值配置文件

另一种方法是,直接用excel将其另存为以逗号分割的csv文件
VBA的功能还是弱了一点

数据和程序分开才是好习惯


另存为以逗号分割的CSV文件,只能满足普通的A,B,C,D格式的配置文件需要,如果需要以数组格式的配置文件呢?

每个游戏开发团队的配置表都有不同的格式,A,B,C,D这样格式的比较多,主要是程序为了迁就策划,方便策划。简单使用Cipher也没错,但多学一种应用比较广泛的方法也是很有用的。

使用宏不但可以导出配置文件,还可以用宏处理一些繁琐的功能,比如一个数值表单,有A,B,C三列数值 如果A大于100,D=B 如果A小于等于100 D=C

这样需要判断生成数值的表单,我们就可以写宏

for i = 1 to 100'假设每列只有100行
A = ActiveSheet.Cells(i,1).value
if A > 100 then
B =ActiveSheet.Cells(i, 2).value
ActiveSheet.Cells(i,4).value = B
else
C =ActiveSheet.Cells(i, 3).value
ActiveSheet.Cells(i, 4).value = C
endif
next i
(以上语法大小写不规范,变量也未声明,给大家看个大体意思)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-6 19:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表