前言:
公司软件最近在做多语言版本,而又来一个西班牙文版本的,之前已经做过中文版本,英文版本和法文版本,之前是同事做的,现在安排我做,之前的做法,使用wps表格,翻译好,然后一个一个复制粘贴到ini文件里面,然后在软件里面读取。这种做法,后期维护起来挺麻烦的,所以自己研究了表格宏。之前也没接触过VB,所以只能自己网上学习

首先先下载VBA模块,下载链接 VBA 7.0

首先学习下VB语言的基本语法
定义变量
Dim i As Integer
Dim str As String
输出语句
Debug.Print "导出成功"
弹框
MsgBox "弹框"
打开视图--立即窗口查看输出

循环语句
for循环

For i = 0 To 5
Debug.Print i
Next i
while循环

Dim i As Integer
i = 0

While i < 5
Debug.Print i
i = i + 1
Wend
条件语句
if

If 1 = 1 Then

End If
if else

If 1 = 1 Then

Else

End If
if   else if    else

If 1 = 1 Then

ElseIf 2 = 2 Then

Else

End If
字符串连接
str = strA & strB
不等于使用<>

新建xlsm格式的表格,只有xlsm格式的文件才能保存宏

开发工具--宏,新建宏

编写代码
首先需要读写ini文件的接口

Private Declare Function GetPrivateProfileString Lib "Kernel32" _
Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal Key As Any, _
ByVal Value As String, _
ByVal ReturnedString As String, _
ByVal Size As Long, _
ByVal FilePath As String) As Long
Private Declare Function WritePrivateProfileString Lib "Kernel32" _
Alias "WritePrivateProfileStringA" _
(ByVal Section As String, _
ByVal Key As Any, _
ByVal Value As Any, _
ByVal FilePath As String) As Long
进一步封装接口

Public Function ReadFromIni(ByVal Section As String, ByVal Key As String, ByVal Value As String, ByVal FilePath As String) As String
Dim str As String
str = Space(256)
Dim ln As Long
ln = GetPrivateProfileString(Section, Key, Value, str, 255, FilePath)
If ln > 0 Then
str = Trim(str)
ReadFromIni = Mid(str, 1, Len(str) - 1)
Else
ReadFromIni = Value
End If
End Function
Public Function WriteToIni(ByVal Section As String, ByVal Key As String, ByVal Value As String, ByVal FilePath As String) As String
Dim l As Long
l = WritePrivateProfileString(Section, Key, Value, FilePath)
End Function
读取表格数据写入ini文件

Sub ExcelToIni()
'ini文件的路径
Dim strIniFile As String
strIniFile = "C:\Users\VULCAN\Desktop\Lang.ini"

'xls表格文件
Dim ExApp As New Excel.Application
'工作簿
Dim Exb As Excel.Workbook
'工作表
Dim Exsh As Excel.Worksheet

ExApp.Workbooks.Open "C:\Users\VULCAN\Desktop\Lang.xlsm"
Set Exb = ExApp.Workbooks(1)
Set Exsh = Exb.Worksheets("Sheet1")

'数据总数
Dim count As Integer
count = Exsh.UsedRange.Rows.count
Debug.Print count

'Value 5表示中文 6表示英文 7表示法文 8表示西班牙文
Dim langCol As Integer
langCol = 7

Dim i As Integer
i = 4
While i < count
If Exsh.Cells(i, 4).Value <> "" Then
a = WriteToIni(Exsh.Cells(i, 3).Value, Exsh.Cells(i, 4).Value, Exsh.Cells(i, langCol).Value, strIniFile)
End If
i = i + 1
Wend

Debug.Print "导出成功"

End Sub
上面三部分代码就是全部代码

下面为测试数据

中文版本

英文版本

法文版本

---------------------

【WPS】表格使用VBA宏编程写入ini文件实现软件多语言的更多相关文章

  1. MFC写入.ini文件的策略

    在使用WritePrivateProfileString的时候, 如果前两个参数已经在INI文件中存在,那该函数的作用就是修改键值,即楼主说的覆盖 如果第一个参数存在,第二个参数不存在,那作用是在IN ...

  2. 用C#读取,写入ini文件

    [DllImport("kernel32.dll")] private static extern bool WritePrivateProfileString(string se ...

  3. C语言实现<读取>和<写入> *.ini文件(转)

    原地址:https://blog.csdn.net/niha1993825jian/article/details/41086403 #include <stdio.h> #include ...

  4. C语言实现 读取写入ini文件实现(转)

    #include <stdio.h> #include <string.h> /* * 函数名: GetIniKeyString * 入口参数: title * 配置文件中一组 ...

  5. INI文件的读取(C语言:GetPrivateProfileString/GetPrivateProfileInt)

    INI文件格式说明 /********************************************* ini文件说明 ini文件是文本文件,由节点(Section)和键值对(key=val ...

  6. INI文件的写入与读取

    INI文件的写入与读取 [节名]         '[]中的节名对应此API的第一参数 Name=内容      'Nmae对应此API的第二参数 API的第三参数是没有取到匹配内容时返回的字符串; ...

  7. 配置信息写入到.ini文件中的方法

    在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中 1.所用的WINAP ...

  8. 91.生成ini文件并写入和读取ini文件

    写入 WritePrivateProfileStringA("hello money", infx[i].name, money, "1.ini"); 按照字符 ...

  9. C# 创建INI文件,写入并可读取。----转载

    基于C#winform设计. 首先创建一个类,我命名为IniFiles.并引入命名空间using System.Runtime.InteropServices; 接着,声明API函数 [DllImpo ...

随机推荐

  1. 装饰器 转载自 http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

    今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数 ...

  2. 跨平台C++开源码的两种经常使用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,採用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  3. HDU 5294 Tricks Device(多校2015 最大流+最短路啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Problem Description Innocent Wu follows Dumb Zha ...

  4. leetcode第一刷_Convert Sorted Array to Binary Search Tree

    晕.竟然另一样的一道题.换成sorted array的话.找到中间位置更加方便了. TreeNode *sortTree(vector<int> &num, int start, ...

  5. 高阶MapReduce_1_链接多个MapReduce作业

    链接MapReduce作业 1.      顺序链接MapReduce作业 顺序链接MapReduce作业就是将多个MapReduce作业作为生成的一个自己主动化运行序列,将上一个MapReduce作 ...

  6. android app记录执行日志 捕获奔溃异常 ,存储日志到文件

    app在执行过程中.为了后期的维护升级,记录日志是一个很好的方法. 为了读取到app执行时的日志,一般的作法是单独开一个线程,在app执行的启动线程.然后app退出时停掉线程. 然而我们更好的方法是开 ...

  7. luogu1006 传纸条

    题目大意 小渊坐在矩阵的左上角,坐标 (1,1 ),小轩坐在矩阵的右下角,坐标 (m,n) .从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小 ...

  8. NOIP2013--火柴排队(树状数组)

    转载: 树状数组,具体的说是 离散化+树状数组.这也是学习树状数组的第一题. 算法的大体流程就是: 1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的, 2.接着,运用树状数组的标准操作来累 ...

  9. 78.员工个人信息保镖页面 Extjs 页面

    1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" ...

  10. 使用 Polyfill 而不再是 bable 来实践js新特性

    现状 我们想要用ES6 语法来写 JavaScript.然而由于我们需要兼容老版本的浏览器,那些浏览器不支持 ES6,我们需要解决这个问题. 有一个标准的做法是:写 ES6 代码 → 将所有代码编译成 ...