vba判断文件编码格式_[VBA]Excel输出utf-8编码格式文件 使用WideCharToMultiByte

这篇博客介绍了如何使用VBA在Excel中创建并输出UTF-8编码格式的文件。通过调用WideCharToMultiByte API函数,将字符串转换为UTF-8编码,并演示了一个例子,展示了如何将工作表数据写入UTF-8编码的XML文件。
摘要由CSDN通过智能技术生成

'API 函数WideCharToMultiByte参数说明

'第一个参数:指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,你也可以使用如下所示代码页之一。

'    CP_ACP 当前系统ANSI代码页

'    CP_MACCP 当前系统Macintosh代码页

'    CP_OEMCP 当前系统OEM代码页,一种原始设备制造商硬件扫描码

'    CP_SYMBOL Symbol代码页.

'    CP_THREAD_ACP 当前线程ANSI代码页,用于Windows 2000及以后版本,我不明白是什么

'    CP_UTF7 UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL

'    CP_UTF8 UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL

'第二个参数:指定如何处理没有转换的字符,但不设此参数函数会运行的更快一些,我都是把它设为0。

'第三个参数: 待转换的宽字符串?

'第四个参数:待转换宽字符串的长度,-1表示转换到字符串结尾。

'第五个参数: 接收转换后输出新串的缓冲区?

'第六个参数: 输出缓冲区大小?

'第七个参数: 指向字符的指针?

'第八个参数:开关变量的指针,用以表明是否使用过默认字符,一般设为0。

Private Declare Function WideCharToMultiByte Lib "kernel32" ( _

ByVal CodePage As Long, _

ByVal dwFlags As Long, _

ByVal lpWideCharStr As Long, _

ByVal cchWideChar As Long, _

ByRef lpMultiByteStr As Any, _

ByVal cchMultiByte As Long, _

ByVal lpDefaultChar As String, _

ByVal lpUsedDefaultChar As Long) As Long

Private Const CP_UTF8 = 65001

Private Sub WriteOut(strPath As String, str As String)

Dim lBufSize As Long

Dim lRest As Long

Dim bUTF8() As Byte

Dim TLen As Long

TLen = Len(str)

lBufSize = TLen * 3 + 1

ReDim bUTF8(lBufSize - 1)

lRest = WideCharToMultiByte(CP_UTF8, 0, StrPtr(str), TLen, bUTF8(0), lBufSize, vbNullString, 0)

If lRest Then

lRest = lRest - 1

ReDim Preserve bUTF8(lRest)

Open strPath For Binary As #1

Put #1, , bUTF8

Close #1

End If

End Sub

'如何使用==================================================

Private Sub CommandButton1_Click()

Const PATH = "E:\testfile.xml"

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

'这里建立一个空文件 并不打开他 建完拉到

fso.CreateTextFile (PATH)

'把所有的内容都放到这个字符串里

Dim str As String

For i = 1 To 50

Dim test As String

test = Trim(Worksheets("Sheet1").Range("A" + Trim(i)).Text)

If Not test = vbNullString Then

str = str & test & vbCrLf

End If

Next

'不用打开文件 让WriteOut直接去写

Call WriteOut(PATH, str)

MsgBox "O K"

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值