Excel VBA数据导出
来源:互联网 发布:下载资源的软件 编辑:程序博客网 时间:2024/04/30 15:07
游戏中很多配置文件都采用Excel保存数据。但实际使用时,可能需要对Excel数据再处理成我们需要的格式。基于此需求,学习了Excel的VBA来导出数据到文件中。
开启VBA
Excel中的开发工具默认都没有打开,此处需要百度一下如何打开对应版本的Excel。(注:高版本的开发工具需要专业版或商业版才能使用,最好不要使用过高版本,最低office excel 2007版)
宏设置
Excel默认禁用所有宏,在宏安全中可以设启用所有宏
新建模块
打开Visual Basic面板,选中工程面板下任意选项右键-插入-模块。
代码示例
Option ExplicitSub parseAndOutputData() Dim result As String Dim file_name As String Dim file_path As String Dim info_row As Integer Dim sheets_count As Integer If Len(Worksheets(1).Cells(2, 1).Value) > 0 Then file_name = Worksheets(1).Cells(2, 1) End If If Len(Worksheets(1).Cells(2, 2).Value) > 0 Then file_path = Worksheets(1).Cells(2, 2) End If If Len(Worksheets(1).Cells(2, 3).Value) > 0 Then info_row = Worksheets(1).Cells(2, 3) End If sheets_count = Worksheets.Count sheets_count = 0 While Len(Worksheets(1).Cells(2, sheets_count + 4)) > 0 sheets_count = sheets_count + 1 Wend If MsgBox("It will Clear File!",VbOKCancel,"提示") = vbCancel Then Exit Sub End If Open ThisWorkbook.Path & "\" & file_name & ".txt" For Output As #1 Write #1, "" Close #1 Dim i As Integer Dim j As Integer Dim k As Integer Dim max_row As Integer Dim max_col As Integer Open ThisWorkbook.Path & "\" & file_name & ".txt" For Binary As #1 result = "return {" For i = 2 To sheets_count max_col = 0 While Len(Worksheets(i).Cells(info_row, (max_col + 1)).Value) > 0 max_col = max_col + 1 Wend max_row = info_row While Len(Worksheets(i).Cells((max_row + 1), 1).Value) > 0 max_row = max_row + 1 Wend If i <> 2 Then result = result & "," & Chr(10) Else result = result & Chr(10) End If result = result & Chr(9) & Worksheets(1).Cells(2, (i + 2)).Value & " = {" For j = (info_row + 1) To max_row If j <> (info_row + 1) Then result = result & "," & Chr(10) & Chr(9) & Chr(9) & "{" Else result = result & Chr(10) & Chr(9) & Chr(9) & "{" End If For k = 1 To max_col If Len(Worksheets(i).Cells(j, k).Value) > 0 Then If k <> 1 Then result = result & "," End If result = result & Chr(10) & Chr(9) & Chr(9) & Chr(9) & Worksheets(i).Cells(info_row, k) & "=" & Worksheets(i).Cells(j, k).Value End If Next result = result & Chr(10) & Chr(9) & Chr(9) & "}" Put #1, , result result = "" Next result = result & Chr(10) & Chr(9) & "}" Next result = result & Chr(10) & "}" Put #1, , result Close #1 MsgBox "OutPut Success!"End Sub
Worksheets(1).Cells(2, 3)代表第一个表的第2行第3列单元格 其中Worksheets(1)代表第一个表,其指多个表中排最前面的表,只与位置有关
Worksheets.Count代表当前xls文件中表的个数
<> 表示不等于 & 表示连接 Chr(9)表示转义字符Tab
在条件语句中 = 表示判断是否相等
ThisWorkbook.Path代表当前文件路径 Output 和 Binary 代表文件打开模式
其中Output 对应用Write写入数据 其会覆盖到文件所有内容。
Binary对应用Put写入数据 其有三个参数,第二个代表可选字节数 ,第三个代表内容
Binary其会覆盖掉最初写入的部分,不会修改其他数据。所以采用Output清除文件内容。
Binary一次最多读写32kb,可以不关闭文件多次顺序写入数据。
#1代表文件号 类似文件句柄吧
MsgBox 弹出框控件 具体使用细节可根据需求百度
本示例代码主要是读取第一个表,获取一些配置信息,比如需要读取多少个表,从第几行开始读取。之后的逻辑主要是为了组织数据的布局
最后在Excel中的开发者面板中点击宏,选择模块再执行。导出文件成功
新建一个空xlsx文件,为其开启宏并添加模块。只要与该xlsx文件在同一文件夹的,其它xlsx文件就可以直接调用其模块导出数据
中文显示问题:
二进制文本输出后的编码格式是ANSI
一般代码文件都采用的是UTF-8 无BOM格式
最简单的方法:
Notepad++可以显示ANSI的中文,但直接将其转换编码格式,其新的格式不能显示原有中文
使用Notepad++新建文件将其编码格式修改为UTF-8 无BOM格式 在将原来的内容拷贝到新文件中即可显示原有中文
- Excel VBA数据导出
- 导出Excel VBA
- VBA导出Excel图片
- 在VBA中将不规则数据导出到Excel
- 使用VBA,20行代码 将Excel数据导出
- Access 在VBA中实现数据导出到Excel
- C#执行access中VBA,用VBA导出access表中数据到Excel中
- excel vba 导出lua配置文件
- Excel vba从excel中导出表格数据和图表到新word文档
- 【一步一步学习VBA】将Excel的每行数据导出为txt文本
- 【Excel技巧】 数据阅后即焚-VBA
- VBA Excel值数据替换
- 用VBA整理EXCEL数据
- 【VBA】 通过VBA脚本将EXCEL的数据导入 ORACLE
- 【初识VBA】用VBA简单处理excel数据
- excel导入、导出数据
- Ilist导出Excel数据
- 数据导出excel文件
- js基础-1
- HDU1811---Rank of Tetris (拓扑排序+并查集(好题))
- 使用node.js快速搭建简易本地HTTP服务
- day27(反射,动态代理,枚举,注解)
- Ubuntu16.04(64位)下面使用Doxygen+Graphviz分析python代码
- Excel VBA数据导出
- 扫描配置文件(二)Java 读写Properties配置文件
- ArrayList的线程不安全问题
- UVA10325(容斥定理)
- 字符流中第一个不重复的字符
- bzoj 1600: [Usaco2008 Oct]建造栅栏(DP)
- Deep Learing 7.1-7.7 笔记
- HRBUST
- 字符串相似度算法