[操作疑难] (己解决)Excel VBA:UTF8 bytes array 转做文字

本帖最后由 C_Law 于 2023-10-30 17:30 编辑

我有个 byte 的 array,系 UTF8 的中文字,eg.
b(i) = e5 b7 b4 e9 bb 8e = 巴黎

请问怎样将这堆 byte 转返做文字放入一个 Cell?

我只识个笨方法,写入个 Temp file 再 Read 返出来,就好似:
  1.     Dim sTemp As String
  2.     sTemp = ""
  3.     Open "D:\Video\TvEditor\myTemp.txt" For Binary As #2
  4.     For j = 1 To i - 2
  5.         Put #2, , bytes(j)
  6.     Next j
  7.     Close #2
  8.    
  9.     Set objStream = CreateObject("ADODB.Stream")
  10.     objStream.Charset = "utf-8"
  11.     objStream.Open
  12.     objStream.LoadFromFile ("D:\Video\TvEditor\myTemp.txt")
  13.     sTemp = objStream.ReadText()
复制代码
sTemp 就系"巴黎"。

本帖最后由 s20012797 于 2023-10-29 19:03 编辑

VBA吾熟,新Office的python吾知做成点.
Excel JavaScript API 有一个:
  1. Excel.run(function(context) {
  2.   var bytes = [0xe5, 0xb7, 0xb4, 0xe9, 0xbb, 0x8e];
  3.   var text = "";
  4.   for (var i = 0; i < bytes.length; i++) {
  5.     text += String.fromCharCode(bytes[i]);
  6.   }
  7.   var sheet = context.workbook.worksheets.getActiveWorksheet();
  8.   var range = sheet.getRange("A1");
  9.   range.values = [[text]];
  10.   return context.sync();
  11. }).catch(function(error) {
  12.   console.log(error);
  13. });
复制代码
程式码使用Excel JavaScript API将位元组阵列转换为文字,并将文字放入储存格A1中.

点用Excel JavaScript API就有努自己做下功课了.

PS:都吾知M$D友仔谂D咩,新Office用python替代VBA都吾真接比JavaScript API座正,两都在效能上差天共地...

TOP

本帖最后由 C_Law 于 2023-10-30 17:31 编辑
VBA吾熟,新Office的python吾知做成点.
Excel JavaScript API 有一个:程式码使用Excel JavaScript API将位元 ...
s20012797 发表于 2023/10/29 19:01


Thanks~~~研究下先。

我另外搵到个方法:
Utf8BytesToString()
https://www.di-mgt.com.au/howto-convert-vba-unicode-to-utf8.html

不过要改小小:
Public Function Utf8BytesToString(abUtf8Array() As Byte) As String
nBytes = BytesLength(abUtf8Array)
改为
Public Function Utf8BytesToString(abUtf8Array() As Byte, NoOfBytes As Long) As String
nBytes = NoOfBytes

使用:
dim sTemp as String
dim bytes(1000) as Byte
bytes(0) = &HE5
bytes(1) = &HB7
bytes(2) = &HB4
bytes(3) = &HE9
bytes(4) = &HBB
bytes(5) = &H8E
sTemp  = Utf8BytesToString(bytes(), 6)

结果:
sTemp = 巴黎

TOP

本帖最后由 bongbong3481 于 2023-10-30 19:04 编辑

Delete.

TOP

回覆 1# C_Law


好奇问下,点解要转做UTF8 ?  VBA 处理中文字的问题?

(见到你个post ,我有少少启发,我个繁体excel  vba 的ide 处理吾到简体字档案名,   如果将中文字转做unicode 再处理,有可能解决到)

TOP

回覆 2# s20012797


    大陆wps 支持javascript , 不过我没用过

TOP

回覆  C_Law


好奇问下,点解要转做UTF8 ?  VBA 处理中文字的问题?

(见到你个post ,我有少少启发,我 ...
bongbong3481 发表于 2023/10/30 19:04

我不是要转做 UTF8。

而系掉转想由一堆 UTF8 的 Byte 转返做 Excel 睇得到的文字。来源系个 Binary file, 当中有些 UTF8 的文字。

via HKEPC IR 5.1.14 - Android(5.1.2F)

TOP

回覆  s20012797


    大陆wps 支持javascript , 不过我没用过
bongbong3481 发表于 2023/10/30 19:06


LibreOffice同FreeOffice已可以通吃Java,JavaScript,VBA,Basic同python,论相容性有排未轮到wps

TOP

我不是要转做 UTF8。

而系掉转想由一堆 UTF8 的 Byte 转返做 Excel 睇得到的文字。来源系个 Binary file ...
C_Law 发表于 2023-10-30 19:16


原来调转左

TOP

LibreOffice同FreeOffice已可以通吃Java,JavaScript,VBA,Basic同python,论相容性有排未轮到wps ...
s20012797 发表于 2023-10-30 19:18



咁西厉,我仲以为wps 开先河,原来都是抄

TOP