Пример макроса в формате OpenOffice.org BASIC для кодировки-раскодировки и сам кодировщик-раскодировщик в формате ODS
(Скачать
кодировщик-раскодировщик в формате ODS. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)
Описание
Процесс кодировки-раскодировки:
- Ввести текстовую строку для кодирования или раскодирования (для раскодирования коды можно вводить в виде \xAB или 0xAB) в ячейку A9 (после ввода выйти из ячейки, напр. нажав Enter) на листе Конвертировать или Реконвертировать соответственно;
- Нажать на кнопку Конвертировать или Реконвертировать соответственно;
- Результат будет выведен в ячейку A10.
База кодов расположена на листе База.
Пример макроса в формате OpenOffice.org BASIC:
Разработка проводилась в OpenOffice.org 3.0.0 в редакции Novell для openSUSE
Протестировано в: OpenOffice.org 3.1.1
REM ***** BASIC *****
Sub Convert
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim CellIn As Object
Dim CellOut As Object
Dim CellOutVar As Object
Dim CellConv As Object
Dim MyLen As Integer
Dim MyString As String
Dim MyChar As String
Dim CellOutPosX As Integer
Dim CellOutPosY As Integer
Dim CellOutString As String
Dim CellCharset As Object
Dim CellRegistr As Object
Dim Charset As String
Dim Registr As String
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(1)
Cell = Sheet.getCellByPosition(0, 8)
CellCharset = Sheet.getCellByPosition(0, 7)
CellRegistr = Sheet.getCellByPosition(0, 6)
Charset = CellCharset.String
Registr = CellRegistr.String
MyLen = Len(Cell.String)
Select Case Charset
Case "koi8-r":
CellOutPosX = 8
Case "cp1251":
CellOutPosX = 5
Case "utf-8":
CellOutPosX = 3
Case Else:
CellOutPosX = 2
End Select
CellIn = Sheet.getCellByPosition(2, 5)
For A = 1 To MyLen
MyChar = Mid(Cell.String, A, 1)
CellIn.String = MyChar
Select Case Registr
Case "Нет":
CellOutVar = Sheet.getCellByPosition(11, 1)
If CellOutVar.String = "#ЗНАЧЕН!!" Then
CellOutString = "("
Else
CellOutString = "(" + CellOutVar.String
End If
For CellOutPosY = 1 To 2
CellOut = Sheet.getCellByPosition(CellOutPosX, CellOutPosY)
If CellOut.String = "#ЗНАЧЕН!!" Then
If CellOutPosY < 2 Then
CellOutString = CellOutString + "."
Else
CellOutString = CellOutString + ")"
End If
Else
If CellOutPosY < 2 Then
CellOutString = CellOutString + CellOut.String
Else
CellOutString = CellOutString + "|" + CellOut.String + ")"
End If
End If
Next
Case Else:
If UCase(MyChar) = MyChar Then
CellOutPosY = 1
Else
CellOutPosY = 2
End If
CellOut = Sheet.getCellByPosition(CellOutPosX, CellOutPosY)
CellOutString = CellOut.String
End Select
MyString = MyString + CellOutString
Next
CellConv = Sheet.getCellByPosition(0, 9)
CellConv.String = MyString
End Sub
Sub ReConvert
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim CellCharset As Object
Dim Charset As String
Dim MyLen As Integer
Dim CellInPosX As Integer
Dim CellInHex As Object
Dim CellInChar As Object
Dim CellOut As Object
Dim CellOutPosY As Integer
Dim A As Integer
Dim NextA As Integer
Dim MyChar As String
Dim MyCharPosX As Integer
Dim MyCharLenX As Integer
Dim MyCharDelim As String
Dim CellOutString As String
Dim MyString As String
Dim CellConv As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(2)
Cell = Sheet.getCellByPosition(0, 8)
CellCharset = Sheet.getCellByPosition(0, 7)
Charset = CellCharset.String
MyLen = Len(Cell.String)
Select Case Charset
Case "koi8-r":
CellInPosX = 8
Case "cp1251":
CellInPosX = 5
Case "utf-8":
CellInPosX = 3
Case Else:
CellInPosX = 2
End Select
CellInHex = Sheet.getCellByPosition(CellInPosX, 5)
CellInChar = Sheet.getCellByPosition(2, 5)
A = 1
Do While A <= MyLen
MyChar = Mid(Cell.String, A, 2)
Select Case MyChar
Case "0x":
MyChar = Mid(Cell.String, A, 4)
CellInChar.String = ""
CellInHex.String = MyChar
CellOutPosY = 1
MyCharPosX = A + 4
MyCharLenX = 4
MyCharDelim = ""
NextA = 4
Case "\x":
MyChar = "0" + Mid(Cell.String, A+1, 3)
CellInChar.String = ""
CellInHex.String = MyChar
CellOutPosY = 1
MyCharPosX = A + 5
MyCharLenX = 3
MyCharDelim = "0"
NextA = 4
Case Else:
MyChar = Mid(Cell.String, A, 1)
CellInChar.String = MyChar
CellInHex.String = ""
If UCase(MyChar) = MyChar Then
CellOutPosY = 1
Else
CellOutPosY = 2
End If
NextA = 1
End Select
CellOut = Sheet.getCellByPosition(2, CellOutPosY)
If CellOut.String = "#ЗНАЧЕН!!" And CellOutPosY = 1 Then
CellOutPosY = 2
CellOut = Sheet.getCellByPosition(2, CellOutPosY)
If CellOut.String = "#ЗНАЧЕН!!" And Charset = "utf-8" Then
MyChar = MyChar + MyCharDelim + Mid(Cell.String, MyCharPosX, MyCharLenX)
CellInChar.String = ""
CellInHex.String = MyChar
CellOutPosY = 1
CellOut = Sheet.getCellByPosition(2, CellOutPosY)
If CellOut.String = "#ЗНАЧЕН!!" Then
CellOutPosY = 2
CellOut = Sheet.getCellByPosition(2, CellOutPosY)
If CellOut.String <> "#ЗНАЧЕН!!" Then
A = A + NextA
End If
Else
A = A + NextA
End If
End If
End If
A = A + NextA
CellOutString = CellOut.String
MyString = MyString + CellOutString
Loop
CellConv = Sheet.getCellByPosition(0, 9)
CellConv.String = MyString
CellInHex.String = ""
End Sub
Что нового в этой версии:
Версия 1.1 (Срд Дек 16 2009):
- Исправлен баг с раскодировкой кирилицы из utf-8.
Версия 1.0 (Втр Сен 01 2009):
- Первый релиз.