IT开发知识库 - 立志做成最实用的开发手册!
Windows Windows2000 Windows xp Windows7 Office VBA VC/MFC
当前位置: 开发知识库 > Windows > VBA > 怎么将EXCEL文件转换成utf8编码的csv文件

怎么将EXCEL文件转换成utf8编码的csv文件

时间:2015-07-02来源:未知 作者:admin点击:
如何将EXCEL文件转换成utf8编码的csv文件 现在遇到了一个比较麻烦的问题,始终没找到很好的解决方法。 需要把EXCEL文件转换成utf8编码的csv文件。 现在是这样处理的: 第一步,用Excel创
如何将EXCEL文件转换成utf8编码的csv文件
现在遇到了一个比较麻烦的问题,始终没找到很好的解决方法。
 
需要把EXCEL文件转换成utf8编码的csv文件。
 现在是这样处理的:
 第一步,用Excel创建文件,另存为 .csv 格式;
 第二步,用记事本打开 CSV 文件,然后另存为 UTF-8 格式
 因为需要转换的文件比较多,这样处理效率太低了。
如何一次将EXCEL文件转换成utf8编码的csv文件
------解决思路----------------------
可以使用软件批量转换。比如CodeConvert之类的。
------解决思路----------------------
用C#吧,
在网上搜搜System.Text.Encoding.GetEncoding("utf-8");
------解决思路----------------------
请楼主试验一下下面的方法
这里的xlUnicodeText是指UCS-2,而不是严格意义上的UTF-8,不过感觉大体上差不多
如果非要严格意义上的UTF-8的话,MSDN上的MVP说:除了向记事本发送SendKeys好像木有跟好滴办法

Sub Macro1()
    ActiveWorkbook.SaveAs Filename:="C:\Book1.csv", FileFormat:=xlUnicodeText, CreateBackup:=False
End Sub
------解决思路----------------------
1>调用方法
Function ReadFile() As String
  Dim H   As Long, S   As Long
  Dim B() As Byte, T() As Byte, X() As Byte
  
  On Error GoTo Cuo
  F1 = "D:\Test1.txt"
  F2 = "D:\Test2.txt"
  S = FileLen(F1)
  
  On Error GoTo 0
  If S < 1 Then GoTo Cuo
  
  H = FreeFile
  ReDim B(0 To S - 1)
    
  Open F1 For Binary As #H
  Get #H, , B
  Close #H

  'ANSI编码转UTF-8编码
  Call ANSIToUnicode(B, T)
  Call UnicodeToUTF8(T, X)
  
  Open F2 For Binary As #H
  Put #H, , X
  Close #H
  Exit Function
Cuo:
  Close
End Function

2>ANSI编码转成Unicode编码
Function ANSIToUnicode(ByRef ANSIData() As Byte, ByRef UnicodeData() As Byte) As Boolean
  On Error GoTo ConvertError
  ANSIToUnicode = False
  UnicodeData = StrConv(ANSIData, 64)
  
  ANSIToUnicode = True
  Exit Function
ConvertError:
  On Error Resume Next
  ReDim UnicodeData(0 To 0)
  ANSIToUnicode = False
End Function

4>Unicode编码转成UTF8编码
Function UnicodeToUTF8(ByRef UnicodeData() As Byte, ByRef UTF8Data() As Byte) As Boolean
  On Error GoTo ConvertError
  Dim i As Long
  Dim UTF8Char() As Byte
  Dim UnicodeChar() As Byte
  Dim UnicodeLength As Long
  Dim UTF8LowerBound As Long
  Dim UTF8UpperBound As Long
  Dim UnicodeLowerBound As Long
  Dim UnicodeUpperBound As Long

  UnicodeToUTF8 = False

  UTF8LowerBound = 0
  UTF8UpperBound = UTF8LowerBound
  ReDim UTF8Data(UTF8LowerBound To UTF8UpperBound)

  UnicodeLowerBound = LBound(UnicodeData)
  UnicodeUpperBound = UBound(UnicodeData)
  UnicodeLength = UnicodeUpperBound - UnicodeLowerBound + 1
  If UnicodeLength Mod 2 > 0 Then GoTo ConvertError

  ReDim UnicodeChar(0 To 1)
  ReDim UTF8Char(0 To 1)

  UTF8LowerBound = 0
  UTF8UpperBound = UTF8LowerBound - 1

  For i = 1 To UnicodeLength \ 2
      DoEvents
      UnicodeChar(0) = UnicodeData(UnicodeLowerBound + ((i - 1) * 2) + 1)
      UnicodeChar(1) = UnicodeData(UnicodeLowerBound + ((i - 1) * 2))
      If UnicodeChar(0) < &H1 And UnicodeChar(1) < &H80 Then
         UTF8UpperBound = UTF8UpperBound + 1
         ReDim Preserve UTF8Data(UTF8LowerBound To UTF8UpperBound)
         UTF8Char(0) = UnicodeChar(1) And &H7F
         UTF8Data(UTF8UpperBound) = UTF8Char(0)
      ElseIf UnicodeChar(0) < &H8 Then
         UTF8UpperBound = UTF8UpperBound + 2
         ReDim Preserve UTF8Data(UTF8LowerBound To UTF8UpperBound)
         UTF8Char(0) = UnicodeChar(0) And &H7
         UTF8Char(0) = UTF8Char(0) * 4
         UTF8Char(1) = UnicodeChar(1) And &HC0
         UTF8Char(1) = UTF8Char(1) \ 64
         UTF8Char(0) = UTF8Char(0) Or UTF8Char(1)
         UTF8Char(0) = UTF8Char(0) Or &HC0
         UTF8Data(UTF8UpperBound - 1) = UTF8Char(0)
         UTF8Char(0) = UnicodeChar(1) And &H3F
         UTF8Char(0) = UTF8Char(0) Or &H80
         UTF8Data(UTF8UpperBound) = UTF8Char(0)
      Else
         UTF8UpperBound = UTF8UpperBound + 3
         ReDim Preserve UTF8Data(UTF8LowerBound To UTF8UpperBound)
         UTF8Char(0) = UnicodeChar(0) And &HF0
         UTF8Char(0) = UTF8Char(0) \ 16
         UTF8Char(0) = UTF8Char(0) Or &HE0
         UTF8Data(UTF8UpperBound - 2) = UTF8Char(0)
         UTF8Char(0) = UnicodeChar(0) And &HF
         UTF8Char(0) = UTF8Char(0) * 4
         UTF8Char(1) = UnicodeChar(1) And &HC0
         UTF8Char(1) = UTF8Char(1) \ 64
         UTF8Char(0) = UTF8Char(0) Or UTF8Char(1)
         UTF8Char(0) = UTF8Char(0) Or &H80
         UTF8Data(UTF8UpperBound - 1) = UTF8Char(0)
         UTF8Char(0) = UnicodeChar(1) And &H3F
         UTF8Char(0) = UTF8Char(0) Or &H80
         UTF8Data(UTF8UpperBound) = UTF8Char(0)
      End If
  Next i
  UnicodeToUTF8 = True
  Exit Function

ConvertError:
  On Error Resume Next
  ReDim UTF8Data(0 To 0)
  UnicodeToUTF8 = False
End Function

------解决思路----------------------
直接在excel中选择另存为,在另存为界面中的保存旁边有个工具选项,点击工具选项之后选择web选项。之后的你就知道啦
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关内容
推荐内容