Re[2]: [oodisc] три вопроса по ОО rc4
Vladimir
vbux на artmed.ru
Ср Окт 1 11:11:08 MSD 2003
Добрый день.
AK> Что ж, это замечательно. Тогда у меня два пожелания:
AK> -- почему бы всё-таки не заменить RecodeCyrDoc и RecodeCyrSheet
AK> моей версией? Она ведь явно лучше. Сейчас в RecodeCyrSheet
AK> используется крайне кривой алгоритм перебора листов в книге:
AK> организуется бесконечный цикл с выходом по факту возникновения
AK> ошибки;
Я согласен, что неплохо разместить переработанную версию.
Мне кажется, что более удачно было бы оформить макросы в таком виде.
Это более красиво выглядит с точки зрения выделения процедур, кроме
того более функционально за счет:
1) блокировки вывода на экран, что существенно ускоряет перекодировку;
2) возможнсти применение процедуры не только к текущему документу, а к
любому или конкретному листу таблицы (RecodeAll перекодирует текущий
документ как и прежде).
Для меня это имеет большое значение, поскольку я это активно
использую, например, при обработке чужих прайс листов.
Библиотека в целом станет более универсальна и, как следствие, функциональна.
Option Explicit
Dim sCP1252 (127) As String
Dim sCP1251 (127) As String
Private oDocument As Object
Sub Init()
sCP1252() = Array("┬","┌","?","└","┘","├","┤","?","┴","S","▀","?","Z", _
......
"u","u","u","y","?","y")
sCP1251() = Array("─","┌","┐","└","┘","├","┤","┬","┴","┼","▀","▄","▌", _
......
"ъ","ы","ь","э","ю","я")
End Sub
Sub RecodeAll()
RecodeDoc(ThisComponent)
End Sub
Sub RecodeSheet(oDoc As Object, Num As Integer)
Init()
If oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
oDoc.lockControllers()
RecodePart(oDoc.Sheets(Num))
oDoc.unlockControllers()
End If
End Sub
Sub RecodeDoc(oDoc As Object)
Dim i As Integer
Init()
oDoc.lockControllers()
If oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
For i = 0 To oDoc.Sheets.getCount() - 1
RecodePart(oDoc.Sheets(i))
Next i
ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then
RecodePart(oDoc)
Else
MsgBox ("Please, run this macro either on a text document or on a spreadsheet!", _
64, "Recode Cyrillic Document")
End If
oDoc.unlockControllers()
End Sub
Sub RecodePart(oReplaceObject As Object)
Dim oReplace As Object
Dim i As Integer
oReplace = oReplaceObject.createReplaceDescriptor
For i = lbound(sCP1252()) To ubound(sCP1252())
oReplace.SearchString = sCP1252(i)
oReplace.ReplaceString = sCP1251(i)
oReplace.SearchCaseSensitive = True
oReplaceObject.replaceAll(oReplace)
Next i
End Sub
Готов к дискуссии по этому вопросу.
С уважением,
Владимир <vbux на artmed.ru>
----------- следущая часть -----------
EГ(uЮ╡╞8╘j e┴ф╜┼┴Ъг8╘r┴╘╜К,yщyГу+≈Зb╔ЙФj)╒┤b╠к╛ЁЖ╜╣╖!≥ИМЁЩ╢с}tс_ЗuМ7ГWЪEГ(uЮ╡╜╦╖
Подробная информация о списке рассылки Oo-discuss