[操作疑難] (己解決)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 就係"巴黎"。

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



咁西厲,我仲以為wps 開先河,原來都是抄

TOP

我不是要轉做 UTF8。

而係掉轉想由一堆 UTF8 的 Byte 轉返做 Excel 睇得到的文字。來源係個 Binary file ...
C_Law 發表於 2023-10-30 19:16


原來調轉左

TOP

回覆  s20012797


    大陸wps 支持javascript , 不過我沒用過
bongbong3481 發表於 2023/10/30 19:06


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

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

回覆 2# s20012797


    大陸wps 支持javascript , 不過我沒用過

TOP

回覆 1# C_Law


好奇問下,點解要轉做UTF8 ?  VBA 處理中文字的問題?

(見到你個post ,我有少少啟發,我個繁體excel  vba 的ide 處理吾到簡體字檔案名,   如果將中文字轉做unicode 再處理,有可能解決到)

TOP

本帖最後由 bongbong3481 於 2023-10-30 19:04 編輯

Delete.

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

本帖最後由 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