Змінити кодування Excel


2

Деякі неправильно написані програми експортували файл Excel з неправильним кодуванням на івриті, з криптовими рядками, наприклад:

ãåç ì÷åçåú äåãòåú åéîé äåìãú

Використання сайт кодування-розв'язувача , Я дізнався, що оригінальний текст:

דוח לקוחות הודעות וימי הולדת 

Який, до речі, означає "повідомлення клієнта-повідомлення та дні народження", на івриті.

Чи є спосіб змінити кодування всього документа з Excel?

Відповіді:


2
  1. Збережіть файл у форматі, розділеному комами .csv.
  2. Відкрийте його в OpenOffice, це дозволить вам змінити кодування на відповідний.
  3. Під час використання OpenOffice збережіть файл у форматі .xls.

1

Це не є повним рішенням, але це виглядає як крок до вирішення.

Дві рядки мають довжину 28 символів, що передбачає кодування "один на один".

Відображення двох рядків у шістнадцятковому форматі дає:

(E3)(E5)(E7)(20)(EC)(F7)(E5)(E7)(E5)(FA)(20)(E4)(E5)(E3)(F2)(E5)(FA)(20)(E5)(E9)(EE)(E9)(20)(E4)(E5)(EC)(E3)(FA)
(5D3)(5D5)(5D7)(20)(5DC)(5E7)(5D5)(5D7)(5D5)(5EA)(20)(5D4)(5D5)(5D3)(5E2)(5D5)(5EA)(20)(5D5)(5D9)(5DE)(5D9)(20)(5D4)(5D5)(5DC)(5D3)(5EA)

Другий рядок - це в основному значення Unicode для івритських літер, як очікувалося.

Перехід для отримання першого рядка виглядає так:

  20 (space) unchanged
  5Dx        Ex
  5Ex        Fx

Це не повна діаграма перетворення, оскільки значення Unicode для івритських літер поширюються від шістнадцяткових 591 до 5F4.

Наступна сировина підписує перший рядок і повертає другий.

Function Decode(CompactStg As String) As String

  Dim CompactChar As Integer
  Dim DecodedChar As Integer
  Dim DecodedStg As String
  Dim Pos As Integer

  DecodedStg = ""

  For Pos = 1 To Len(CompactStg)
    CompactChar = Asc(Mid(CompactStg, Pos, 1))
    Select Case CompactChar
      Case 32 To 127     ' Hex 20 - 7F
        ' No change
      DecodedChar = CompactChar
      Case 224 To 239    ' Hex E0 - EF
        ' Convert EX to 5DX
        DecodedChar = CompactChar + 1264
      Case 240 To 255    ' Hex F0 - FF
        ' Convert FX to 5EX
        DecodedChar = CompactChar + 1264
    End Select
    DecodedStg = DecodedStg & ChrW(DecodedChar)
  Next

  Decode = DecodedStg

End Function

Я використав наступну процедуру для виведення рядків у безпосереднє вікно. За допомогою декількох прикладів ви зможете визначити всі переходи. Шістнадцяткові 591 - 5C7 івритських літер також можуть бути перетворені шляхом додавання десяткового числа 1264, але це не може бути перетворення для івритських літер 5F0 - 5F4.

Sub HexOut(Stg)

  Dim Pos

  For Pos = 1 To Len(Stg)
    Debug.Print "(" & Hex(AscW(Mid(Stg, Pos, 1))) & ")";
  Next
  Debug.Print

End Sub

Отримуйте задоволення!


Велике спасибі за великі зусилля! Насправді я шукаю рішення без програмування, як, наприклад, якусь внутрішню функцію Excel, оскільки користувач програмного забезпечення досить далеко не є комп'ютерним експертом.
Adam Matan

Мій фон означає, що я майже завжди шукаю рішення для програмування будь-якої проблеми. Це може бути помилкою, оскільки Excel має деякі дивовижні функціональні можливості без програмування. Як тільки я помітив, що струни однакові, слідство було досить легким. Можливо, ця інформація допоможе комусь запропонувати інший підхід. Це може допомогти, якщо ви визначите масштаб проблеми. Ми говоримо про відносно невелику кількість заголовків стовпців або текстових значень на кожному з 30 000 рядків? Так чи інакше я не бачу в цьому складних проблем програмування. Можливо, допоможе досвідчений друг.
Tony Dallimore

@AdamMatan. Мені цікаво. Чи вийшло щось з цього?
Tony Dallimore

На жаль, немає. Я повинен був виправити обхідний шлях, експортуючи дані як текст, і вручну імпортувати до Excel.
Adam Matan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.